Почему код ниже
private static List<WorkflowVariableDataSet> MergeDatasetsListBranch(out List<WorkflowVariableDataSet> datasetsList)
{
if(datasetsList == null)
datasetsList=new List<WorkflowVariableDataSet>();
datasetsList=new List<WorkflowVariableDataSet>();
return datasetsList;
}
генерирует ошибку в первом выражении if
:
Out parameter 'datasetsList' might not be initialized before accessing.
Я знаю, что в этот момент он должен быть неинициализирован, но слово might
предполагает, что ошибка заключается в возможном доступе к неинициализированному объекту (когда он даже не доступен, это ссылка, которая проверяется). Ofc, что не происходит с ключевым словом ref
, но мне любопытно, как эталонная проверка нарушает политику вне параметров.
ИЗМЕНИТЬ Я отредактировал вопрос и пример: в любом случае объект out будет инициализирован внутри метода. Возникает вопрос: ПОЧЕМУ неинициализированный объект не может быть равен нулю? Как это отличается от:
object o;
if(o==null)
...