用Codecademy学习,无法找出这个错误

  • 本文关键字:错误 Codecademy 学习 c#
  • 更新时间 :
  • 英文 :


我正在用Codecademy学习编码,但我搞不懂这个。它说"生物群落应该接受热带作为一个值"。它不会给我一个语法错误。提前感谢您的帮助!

//Codecademy!

"定义Biome字段的Biome属性。它会有getter和setter。setter应该只允许三个值:"tropical"、"temperate"one_answers"boreal"。如果使用其他值,请将"biome"设置为"未知"。

//THIS IS THE FOREST CLASS!
{
class Forest
{
public string name;
public int trees;
public int age;
public string biome;

public string Name
{
get {return name;}
set
{
name = Name;
}
}
public int Trees
{
get {return trees;}
set
{
trees = Trees;

}

}

public string Biome{
get {return biome;}
set {
if (Biome == "Temperate" ||
Biome == "Tropical" ||
Biome == "Boreal"){
biome = Biome;
}
else 
{
biome = null;
}

}
}



}

//THIS IS THE PROGRAM CLASS!
using System;

namespace BasicClasses
{
class Program
{
static void Main(string[] args)
{
Forest f = new Forest();
f.Name = "Congo";
f.Trees = 0;
f.age = 0;
f.Biome = "Tropical";

Console.WriteLine(f.Name);
Console.WriteLine(f.Biome);
}
}
}

在setter中使用value

public string Biome {
get {
return biome;
}
set {
if (value == "Temperate" ||
value == "Tropical" ||
value == "Boreal") {
biome = value;
} else {
biome = "Unknown";
}
}
}

属性setter接收一个名为value的参数,你应该使用它来更新你的内部字段,这些内部字段(称为属性的后备字段)不应该是公共的,否则你放在setter/getter代码中的任何逻辑都可能被绕过直接访问这些字段

class Forest
{
// Internal fields should be private
private string name;
private int trees;
private int age;
private string biome;
public string Name
{
get {return name;}
set {name = value;}
}
public int Trees
{
get {return trees;}
set {trees = value};
}
public string Biome
{
get {return biome;}
set 
{
if (value == "Temperate" ||
value == "Tropical" ||
value == "Boreal")
{
biome = value;
}
else 
{
biome = "Unknow";
}
}
}

然而,我同意上面的评论,你的Biome应该是BiomeEnum类型的属性,这样编译器可以帮助你避免将其设置为无效值

public enum BiomeEnum
{
Unknow = 0,
Temperate = 1,
Tropical = 2,
Boreal = 3
}
...
public BiomeEnum Biome
{
get {return biome;}
set { biome = value;}
}

最新更新