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