我收到以下错误:
在声明
之前不能使用局部变量'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()
之前没有使用它。如果有人能够对此有所了解那将是很好的
答案 0 :(得分:9)
您已在getFormattedDoB中声明了一个名为dob的局部变量。编译器无法区分它与成员dob之间的区别。尝试添加"这个"你指的是成员变量而不是本地变量:
DateTime origin = DateTime.Parse(this.dob);
更好的是,不要对局部变量使用相同的名称。
编辑:除非您确实打算设置成员变量而不是创建新变量。在这种情况下删除"字符串"正如安德鲁建议的那样。
答案 1 :(得分:4)
问题是你有两个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; }
答案 2 :(得分:0)
您已将getFormattedDoB
中的变量名称“dob”重用为本地字符串,这会使编译器感到困惑。有两种可能的解决方案:
在以下行中使用this.dob来指定类级别变量(您可能也应该这样做,因为它也是一种很好的做法:
DateTime origin = DateTime.Parse(this.dob);
答案 3 :(得分:0)
您正在
重新声明dobstring dob = origin.ToString("d");
应该是
dob = origin.ToString("d");