本地变量声明问题

时间:2012-04-12 01:45:22

标签: c#

我收到以下错误:

  

在声明

之前不能使用局部变量'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()之前没有使用它。如果有人能够对此有所了解那将是很好的

4 个答案:

答案 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”重用为本地字符串,这会使编译器感到困惑。有两种可能的解决方案:

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

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

答案 3 :(得分:0)

您正在

重新声明dob
string dob = origin.ToString("d"); 

应该是

 dob = origin.ToString("d");