本地变量声明问题
我得到以下错误:
在声明之前不能使用局部变量’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”重用为本地字符串,这使编译器感到困惑。 有两种可能的解决方案:
- 在getFormattedDoB中重命名本地dob(你真的应该这样做,因为这是一个好习惯)。
-
在下面的行中使用this.dob来指定类级别变量(您可能也应该这样做,因为它也是一种很好的做法:
DateTime origin = DateTime.Parse(this.dob);
你正在重新声明dob in
string dob = origin.ToString("d");
它应该是
dob = origin.ToString("d");