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