局部变量声明问题
本文关键字:问题 声明 局部变量 | 更新日期: 2023-09-27 18:30:53
我收到以下错误:
在声明之前不能使用局部变量"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
- 属性和局部变量。 变量声明(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.Parse(this.dob);
你正在重新声明 dob 在
string dob = origin.ToString("d");
它应该是
dob = origin.ToString("d");