Почему, если я пишу
void Main()
{
string value = @"C:\";
if (!string.IsNullOrEmpty(value)) {
string sDirectory = Path.GetDirectoryName(value);
}
}
, он компилируется.
А если я пишу
void Main()
{
string value = @"C:\";
if (!string.IsNullOrEmpty(value))
string sDirectory = Path.GetDirectoryName(value);
}
Это не так?
Ясно, что с чисто функциональной точки зрения объявление переменной в примере second бесполезно, но почему оно волшебным образом становится полезным в first пример, так?
Код IL, полученный в обоих примерах, точно одинаков.
IL_0000: ldstr "C:\"
IL_0005: stloc.0
IL_0006: ldloc.0
IL_0007: call System.String.IsNullOrEmpty
IL_000C: brtrue.s IL_0015
IL_000E: ldloc.0
IL_000F: call System.IO.Path.GetDirectoryName
РЕДАКТИРОВАТЬ:
Забыл упомянуть, что для получения кода IL
для второго случая (так что дело, которое не компилируется), достаточно компилировать без string sDirectory =