我是C#的新手,我尝试从最基础的方面学习它,但是我坚持使用类。我制作了第一个示例来进行实践,但该示例工作正常,但是当我添加一些复杂性时,我会得到一个错误:
“名称“ iArcher”在当前上下文中不存在。”
请帮助解释问题所在,并提出正确(简便)的解决方案。
谢谢!
使用系统;
namespace Units
{
class Archer
{
public int id;
public int hp;
public float speed;
public float attack;
public float defence;
public float range;
public void setProp(int id, int hp, float sp, float at, float de, float ra)
{
this.id = id;
this.hp = hp;
speed = sp;
attack = at;
defence = de;
range = ra;
}
public string getProp()
{
string str = "ID = " + id + "\n" +
"Health = " + hp + "\n" +
"Speed = " + speed + "\n" +
"Attack = " + attack + "\n" +
"Defence = " + defence + "\n" +
"Range = " + range + "\n" ;
return str;
}
static void Main(string[] args)
{
string input = Console.ReadLine();
if (input == "create: archer")
{
Archer iArcher = new Archer();
iArcher.setProp(100, 20, 4f, 8f, 3.5f, 25f);
}
if (input == "property: archer")
{
Console.WriteLine(iArcher.getProp()); // ERROR!
}
Console.ReadLine();
}
}
}
答案 0 :(得分:2)
C#具有作用域。范围内的项目可以看到包含它的范围内的所有内容,但外部范围在内部范围内看不到。您可以阅读有关范围here的信息。
以您的示例为例:
if (input == "create: archer")
{
Archer iArcher = new Archer();
iArcher.setProp(100, 20, 4f, 8f, 3.5f, 25f);
}
iArcher
在您的if
语句的范围内,因此if语句看不到该代码之外的代码。
要解决此问题,请将定义或iArcher
移至if语句之外:
Archer iArcher = new Archer();
if (input == "create: archer")
{
iArcher.setProp(100, 20, 4f, 8f, 3.5f, 25f);
}
if (input == "property: archer")
{
Console.WriteLine(iArcher.getProp());
}
请注意,这现在给您带来另一个问题:input
不能同时是“ create:archer”和“ property:archer”。
一种解决方案可能是将读取用户输入内容移入一个循环中,同时将iArcher
保留在该循环外:
Archer iArcher = new Archer();
string input = null;
while ((input = Console.ReadLine()) != "exit")
{
if (input == "create: archer")
{
iArcher.setProp(100, 20, 4f, 8f, 3.5f, 25f);
}
else if (input == "property: archer")
{
Console.WriteLine(iArcher.getProp());
}
}
要退出循环,只需输入“ exit”作为输入。
答案 1 :(得分:1)
移动此行:
Archer iArcher = new Archer();
if块之外,它将起作用。