局部变量声明问题

本文关键字:问题 声明 局部变量 | 更新日期: 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"作为本地字符串,这会混淆编译器。 有两种可能的解决方案:

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

    日期时间原点 = DateTime.Parse(this.dob);

你正在重新声明 dob 在

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

它应该是

 dob = origin.ToString("d");