本地变量声明问题

我得到以下错误:

在声明之前不能使用局部变量’dob’

这是我的实施

public class Person { ... public string dob { get; set; } ... public int getAge() { DateTime origin = DateTime.Parse(dob); return DateTime.Today.Year - origin.Year; } public string getFormattedDoB() { DateTime origin = DateTime.Parse(dob); string dob = origin.ToString("d"); return dob; } } 

我不知道该怎么做,因为它抱怨它在getFormattedDoB()使用dob而不是在它之前的getAge()中。 如果有人能够对此有所了解,那就太棒了

您已在getFormattedDoB中声明了一个名为dob的局部变量。 编译器无法区分它与成员dob之间的区别。 尝试添加“this”,表示成员变量而不是本地变量:

 DateTime origin = DateTime.Parse(this.dob); 

更好的是,不要对局部变量使用相同的名称。

编辑:除非您确实打算设置成员变量而不是创建新变量。 在这种情况下,删除安德鲁建议的“字符串”。

问题是你有两个dob s-属性和局部变量。 变量声明的范围( string dob = ... )是整个块( {}之间的所有内容)。 因此编译器认为在线:

 DateTime origin = DateTime.Parse(dob); 

你在声明它之前使用dob 变量 ,当(我们假设)你真的意味着dob 属性

正如其他人所提到的,您应该重命名该属性。 C#中的标准命名约定是

 public String DateOfBirth { get; set; } //(assuming that is what DOB stands for) 

还是更好

 public DateTime DateOfBirth { get; set; } 

您已将getFormattedDoB的变量名称“dob”重用为本地字符串,这使编译器感到困惑。 有两种可能的解决方案:

  1. 在getFormattedDoB中重命名本地dob(你真的应该这样做,因为这是一个好习惯)。
  2. 在下面的行中使用this.dob来指定类级别变量(您可能也应该这样做,因为它也是一种很好的做法:

    DateTime origin = DateTime.Parse(this.dob);

你正在重新声明dob in

 string dob = origin.ToString("d"); 

它应该是

  dob = origin.ToString("d");