Проблема объявления локальной переменной

Я получаю следующую ошибку:

Cannot use local variable 'dob' before it is declared

Вот моя реализация

<code>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;
        }
    }
</code>

Я не уверен, что делать с этим, потому что он жалуется на использование dob вgetFormattedDoB() но не вgetAge() который предшествует этому. Если бы кто-то мог пролить свет на это, было бы здорово

 CStreel12 апр. 2012 г., 03:59
Это часть программы слияния, которая извлекает информацию из программы на основе Unix, так что легче переносить время в секундах в виде строки и анализировать ее в DateTime на стороне Windows.
 ChaosPandion12 апр. 2012 г., 03:57
Можете ли вы объяснить, почемуdob не являетсяDateTime? Вам понадобится довольно веская причина для использованияstring по определенному типу.
 CStreel12 апр. 2012 г., 04:05
Это первая итерация программы, которая была одной из многих будущих оптимизаций, которые я запланировал
 ChaosPandion12 апр. 2012 г., 04:04
Хорошо, но, кажется, бессмысленно каждый раз анализировать строку. Почему бы просто не сделать это один раз?

Ответы на вопрос(4)

Вы переделываете dob в

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

так должно быть

 dob = origin.ToString("d"); 

getFormattedDoB как локальная строка, которая сбивает с толку компилятор. Есть 2 возможных решения:

Rename the local dob in getFormattedDoB (which you really should do because it's good practice).

Use this.dob in the following line to specify the class level variable (which you should probably also do because it's also good practice:

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

Решение Вопроса

лятор не может сказать разницу между этим и элементом dob. Попробуйте добавить & quot; this & quot; где вы имеете в виду переменную-член, а не локальную:

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

Более того, не используйте одно и то же имя для локальной переменной.

Изменить: Если вы на самом деле не намеревались установить переменную-член, а не создать новую. В этом случае удалите & quot; строку & quot; как предположил Андрей.

 CStreel12 апр. 2012 г., 03:51
Спасибо за это, я не поднял это & lt;
 12 апр. 2012 г., 08:08
Ошибкаnot что компилятор не может определить разницу; компиляторcan объясни разницу. Скорее ошибкаthe error that is actually reported, Локальная переменная находится в области действия всего блока; это ошибка использовать егоbefore the declaration.

dobs- свойство и локальная переменная. Область объявления переменной (string dob = ...) весь блок (все между{ а также}). Поэтому компилятор считает, что на линии:

DateTime origin = DateTime.Parse(dob);

вы используетеdob variable до того, как это объявлено, когда (мы предполагаем) вы действительно имели в видуdob property.

Как уже упоминали другие, вы должны переименовать собственность. Стандартное соглашение об именах в C # будет

public String DateOfBirth { get; set; } 
//(assuming that is what DOB stands for)

или еще лучше

public DateTime DateOfBirth { get; set; } 

Ваш ответ на вопрос