После прочтения this Eric Lippert Статья, я понимаю, что компилятор C# не нравится, если мы оставляем локальными переменными неинициализированные.Как обрабатывать неинициализированные локальные переменные
Когда я сталкивался с этой «проблемой» время от времени, я смотрел на некоторые из моих старых кодов и смог отсеять большую часть ситуации, где на самом деле не нужны неинициализированные (SomeClass obj = null
) локальные переменные.
Но я столкнулся с ситуацией, когда я не знаю, как реорганизовать код.
public void DoSomething(string foo) {
SomeClass obj; // = null;
try {
obj = SomeClass.CreateItem(target);
} catch(CustomException ex) {
// notify UI of error
}
if (obj != null) {
// do something with `obj`
}
}
SomeClass.CreateItem
может не работать из-за внешних факторов. Если это так, я хочу уведомить пользователя, если не хочу выполнить действие.
C# компилятор не хочет, чтобы оставить obj
неинициализированным, поэтому я обычно назначить null
к нему.
Это чувствует, как «взломать» сейчас и мой вопрос:
Есть недостаток дизайна в коде выше?
И если есть, как мне обращаться со ссылками во время компиляции, когда я не могу определить, будут ли они указывать на существующий объект во время выполнения?
«Обоснование» компилятора заключается в том, что если в SomeClass.CreateItem есть исключение, obj останется неинициализированным при достижении теста «obj! = Null». Общий принцип заключается в том, что переменную не нужно инициализировать, если она обязательно назначается в коде, т. Е. Все условные ветви присваивают значение. – Graffito