Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 得到一个我不知道的非常奇怪的逻辑错误';我不明白_C# - Fatal编程技术网

C# 得到一个我不知道的非常奇怪的逻辑错误';我不明白

C# 得到一个我不知道的非常奇怪的逻辑错误';我不明白,c#,C#,这段代码应该输出这样的行 特雷克斯(双腿)恐龙(已灭绝) 获取从文件中获取的动物列表。 如果动物没有灭绝,If语句将跳过它 一切正常,除了最后一点,应该是(灭绝) 相反,它说“true”或“false”,这取决于我如何设置isExtinct属性 现在,我在isExtinct属性中放入了一个if语句以输出“灭绝”,但编译后出现了一个错误 Stacktrace: Native stacktrace: mono() [0x8105b4a] mono() [0x8153274] mono() [0

这段代码应该输出这样的行

特雷克斯(双腿)恐龙(已灭绝)

获取从文件中获取的动物列表。 如果动物没有灭绝,If语句将跳过它

一切正常,除了最后一点,应该是(灭绝)

相反,它说“true”或“false”,这取决于我如何设置isExtinct属性

现在,我在isExtinct属性中放入了一个if语句以输出“灭绝”,但编译后出现了一个错误

Stacktrace:


Native stacktrace:

mono() [0x8105b4a]
mono() [0x8153274]
mono() [0x806a20b]
[0x777b940c]
mono() [0x8153224]
mono() [0x806a20b]
[0x777b940c]
[0x7744c667]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]
[0x7744c66c]

Debug info from gdb:


=================================================================
Got a SIGSEGV while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries 
used by your application.
=================================================================

Aborted (core dumped)
代码如下

class MainClass
{
    public static void Main (string[] args)
    {

        StreamReader input = new StreamReader ("animals.txt");

        while (!input.EndOfStream) {    
            string line = input.ReadLine ();
            string[] data = line.Split (',');
            if (data [3] == "true") {
                Animal myAnimal = new Animal (data[0], Convert.ToInt32(data[1]), data[2], Convert.ToBoolean(data[3]));
                Console.WriteLine (myAnimal);
                }
        }
    }
}
}

public class Animal
{
    string species;
    int legs;
    string genus;
    bool extinct;

    public Animal (string species, int legs, string genus, bool extinct)
    {
        this.species = species;
        this.legs = legs;
        this.genus = genus;
        this.extinct = extinct;
    }

    public string Species{ get; set;}
    public int Legs{ get; set;}
    public string Genus{ get; set;}
    public string isExtinct{ 
        get
        {
            return isExtinct;
        }
        set 
        {
            if (extinct == true) {
                isExtinct = "extinct";
            } else {
                isExtinct = "";
            }
        }
    }

    public override string ToString(){
        return String.Format("{0} ({1} legged) {2} ({3})", species, legs, genus, isExtinct);
    }
}
}

快速修复

嗯,
isExtinct
属性看起来像个问题。。。试试这个:

public string isExtinct
{
    get { return extinct ? "extinct" : "" }
}
<>这应该解决问题,但我想你可能想考虑一下清理……p>
清理

例如,我认为根本没有getter。只需执行
ToString
方法中的逻辑(因为这可能是唯一需要使用它的地方),然后也可以使括号有条件。比如:

public override string ToString()
{
    string result = String.Format("{0} ({1} legged) {2}", species, legs, genus);
    if(extinct)
        result += " (extinct)";

    return result;
}

建议代码

此外,您的属性
种类
、和
没有任何用处,它们与您的字段没有任何关联。我建议删除字段,只保留4个属性:

public string Species{ get; set;}
public int Legs{ get; set;}
public string Genus{ get; set;}
public string IsExtinct { get; set;}

public Animal (string species, int legs, string genus, bool isExtinct)
{
    Species = species;
    Legs = legs;
    Genus = genus;
    IsExtinct = isExtinct;
}

public override string ToString()
{
    string result = String.Format("{0} ({1} legged) {2}", Species, Legs, Genus);
    if(IsExtinct )
        result += " (extinct)";

    return result;
}

快速修复

嗯,
isExtinct
属性看起来像个问题。。。试试这个:

public string isExtinct
{
    get { return extinct ? "extinct" : "" }
}
<>这应该解决问题,但我想你可能想考虑一下清理……p>
清理

例如,我认为根本没有getter。只需执行
ToString
方法中的逻辑(因为这可能是唯一需要使用它的地方),然后也可以使括号有条件。比如:

public override string ToString()
{
    string result = String.Format("{0} ({1} legged) {2}", species, legs, genus);
    if(extinct)
        result += " (extinct)";

    return result;
}

建议代码

此外,您的属性
种类
、和
没有任何用处,它们与您的字段没有任何关联。我建议删除字段,只保留4个属性:

public string Species{ get; set;}
public int Legs{ get; set;}
public string Genus{ get; set;}
public string IsExtinct { get; set;}

public Animal (string species, int legs, string genus, bool isExtinct)
{
    Species = species;
    Legs = legs;
    Genus = genus;
    IsExtinct = isExtinct;
}

public override string ToString()
{
    string result = String.Format("{0} ({1} legged) {2}", Species, Legs, Genus);
    if(IsExtinct )
        result += " (extinct)";

    return result;
}

您的属性逻辑错误-您不希望有两个单独的可写属性,并且语法不正确

试试这个:

public string isExtinct { 
        get
        {
            if (extinct == true) {
                return "extinct";
            } else {
                return "";
            }        
        }
}

您的属性逻辑错误-您不希望有两个单独的可写属性,并且语法不正确

试试这个:

public string isExtinct { 
        get
        {
            if (extinct == true) {
                return "extinct";
            } else {
                return "";
            }        
        }
}

第一个猜测是,你肯定只需要一个获得者。。使用“set”信息,例如如果为true,则返回“execute”,如果为空,则返回“empty”。您会得到一个
StackOverflowException
,因为
isExtinct
的getter返回
isExtinct
(相同的属性),从而导致无限递归。首先猜测是isExtinct肯定您只需要一个getter。。使用“set”信息,例如如果为true,则返回“execute”,如果为空,则返回“empty”。您将获得一个
StackOverflowException
,因为
isExtinct
的getter返回
isExtinct
(相同的属性),从而导致无限递归。谢谢。我不得不在末尾加上set{}。出于某种原因,C#不允许使用空集;陈述天哪,我想念爪哇@hggohh-C#允许属性没有
。你有错误吗?这很有效,谢谢。我不得不在末尾加上set{}。出于某种原因,C#不允许使用空集;陈述天哪,我想念爪哇@hggohh-C#允许属性没有
。你有错误吗?我同意这一点,通常不会在属性中应用逻辑,但我被指示在这里。来自java,我刚刚添加了一个方法来比较2,然后通过…public override String toString(){}将输出管道化。我同意这一点,通常不会在属性中应用逻辑,但这里已经指示我。来自java,我刚刚添加了一个方法来比较2,然后通过…public override String toString(){}管道输出