Path.GetExtension (file.FileName) выдает возможное предупреждение Nullreference - PullRequest
3 голосов
/ 02 ноября 2011

Когда я добавляю ".ToLowerInvariant()" к Path.GetExtension(file.FileName), ReSharper выдает предупреждение о возможном исключении Nullreference.

Я пытался выполнить следующее, но предупреждение исчезло.Чего мне не хватает?

if (file != null && Path.GetExtension(file.FileName) != null)
            {
                switch (Path.GetExtension(file.FileName).ToLowerInvariant())
                {
                    case ".jpg":
                    case ".png":
                    case ".gif":
                    case ".jpeg":
                        break;
                    default:
                        break;

                }
}

Ответы [ 4 ]

3 голосов
/ 02 ноября 2011

Поскольку ToLowerInvariant() вызывается по результату Path.GetExtension (). Нет гарантии, что Path.GetExtension () вернет что-либо значимое (например, если file.Filename имеет значение null).

Лучше всего проверить, что результат Path.GetExtension не равен нулю, прежде чем вызывать что-либо еще для него. (или вызовите ToLower () для file.FileName перед тем, как поместить его в GetExtension, в любом случае убедитесь, что вы точно знаете, что вкладываете в GetExtension (), или вы не можете дать никаких гарантий, что то, что вы получите, будет тем, что вы искали) ).

1 голос
/ 02 ноября 2011

Итак MSDN сообщает GetExtension вернет ноль только в том случае, если вы передадите пустое FileName.

Расширение указанного пути (включая точку "."),или Nothing [Null], или String.Empty.Если path имеет значение Nothing [Null], GetExtension возвращает Nothing [Null].Если путь не имеет информации о расширении, GetExtension возвращает String.Empty.

Если вы сначала проверите if (file != null && file.FileName != null), вы в безопасности.

Вы также можете отключить предупреждение за резкость с помощью

if (file != null) 
{
    string extension = Path.GetExtension(file.FileName);
    if (extension != null) //will be null if file.FileName is null
    {
        switch(extension.ToLowerInvariant())
        { 
          //..snip
        }
    }
}
0 голосов
/ 14 января 2015

Это предупреждение о резком уточнении, вам просто нужно проверить наличие нулей.

Вот пример:

var extension = Path.GetExtension(myFile.FileName);

if (extension == null || extension.ToLower() != ".jpg")
{
    lblOutput.Text = @"The file must have an extension of JPG";
    return;
}
0 голосов
/ 02 ноября 2011

Звучит как ложное предупреждение.

Так что похоже, что ReSharper не понимает, что Path.GetExtension(file.FileName) не меняется между вашим тестом и временем, которое он используется в ToLowerInvariant.

...