Path.GetExtension(file.FileName)提供可能的Nullreference警告

时间:2011-11-02 10:11:58

标签: c# .net resharper nullreferenceexception

当我添加".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 个答案:

答案 0 :(得分:3)

因为在Path.GetExtension()的结果上调用了ToLowerInvariant()。无法保证Path.GetExtension()将返回任何有意义的内容(例如,如果file.Filename为null)。

在调用其他任何内容之前,最好检查Path.GetExtension的结果是否为null。 (或者在将文件放入GetExtension之前调用文件.FileName上的ToLower(),无论哪种方式都要确保你确切知道你在GetExtension()中放入了什么,或者你无法保证你得到的将是你所追求的)。

答案 1 :(得分:1)

所以MSDN says GetExtension只会在传入一个null的FileName时返回null。

  

指定路径的扩展名(包括句点“。”)或   没有[Null]或String.Empty。如果path为Nothing [Null],则返回GetExtension   没有[空]。如果path没有扩展信息,则为GetExtension   返回String.Empty。

首先检查if (file != null && file.FileName != null)是否安全。

您还可以使用

使resharper警告消失
if (file != null) 
{
    string extension = Path.GetExtension(file.FileName);
    if (extension != null) //will be null if file.FileName is null
    {
        switch(extension.ToLowerInvariant())
        { 
          //..snip
        }
    }
}

答案 2 :(得分:0)

听起来像是一个错误的警告。

因此,听起来ReSharper并不理解Path.GetExtension(file.FileName)在您的测试与ToLowerInvariant中使用的时间之间没有变化。

答案 3 :(得分:0)

这是一个resharper警告,你只需要检查空值。

以下是一个例子:

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

if (extension == null || extension.ToLower() != ".jpg")
{
    lblOutput.Text = @"The file must have an extension of JPG";
    return;
}