Path.GetExtension(file.FileName) 给出可能的 Nullreference 警告
Posted
技术标签:
【中文标题】Path.GetExtension(file.FileName) 给出可能的 Nullreference 警告【英文标题】:Path.GetExtension(file.FileName) gives possible Nullreference warning 【发布时间】:2011-12-20 04:30:46 【问题描述】:当我添加".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;
【问题讨论】:
尝试给出文件 Path.GetExtension(fullpath) 的完整路径。还要检查路径是否为空 【参考方案1】:因为在 Path.GetExtension() 的结果中调用了 ToLowerInvariant()
。无法保证 Path.GetExtension() 将返回任何有意义的内容(例如,如果 file.Filename 为 null)。
最好先检查 Path.GetExtension 的结果是否为空,然后再调用其他任何内容。 (或在将文件名放入 GetExtension 之前调用文件名上的 ToLower(),无论哪种方式,请确保您确切知道要放入 GetExtension() 中的内容,否则您无法保证得到的内容将是您所追求的)。
【讨论】:
【参考方案2】:所以MSDN says GetExtension 只会在你传入一个为空的 FileName 时返回 null。
指定路径的扩展名(包括句点“.”),或 Nothing[Null],或 String.Empty。如果路径是 Nothing[Null],GetExtension 返回 无[空]。如果路径没有扩展信息,GetExtension 返回 String.Empty。
如果你先检查if (file != null && file.FileName != null)
,你是安全的。
您还可以使 reshaper 警告消失
if (file != null)
string extension = Path.GetExtension(file.FileName);
if (extension != null) //will be null if file.FileName is null
switch(extension.ToLowerInvariant())
//..snip
【讨论】:
添加一个从未满足的条件对我来说听起来像是一个可疑的设计选择。您还使用ToLower
而不是 ToLowerInvariant
添加了一个错误
@CodeInChaos 同意了。修改为删除冗余检查。【参考方案3】:
听起来像是一个错误的警告。
所以听起来 ReSharper 不明白 Path.GetExtension(file.FileName)
在您的测试和它在 ToLowerInvariant
中使用的时间之间没有变化。
【讨论】:
【参考方案4】:这是一个更清晰的警告,您只需要检查空值即可。
这是一个例子:
var extension = Path.GetExtension(myFile.FileName);
if (extension == null || extension.ToLower() != ".jpg")
lblOutput.Text = @"The file must have an extension of JPG";
return;
【讨论】:
【参考方案5】:好吧,我遇到了同样的问题,简单的解决方法是
确保您的 .cshtml 文件中包含表单发布方法
enctype="multipart/form-data"
<form method="post" asp-for="Upsert" enctype="multipart/form-data">
【讨论】:
以上是关于Path.GetExtension(file.FileName) 给出可能的 Nullreference 警告的主要内容,如果未能解决你的问题,请参考以下文章
我可以为 System.IO.Path 类创建扩展方法吗? [复制]
C#对文件/目录的操作:PathFileDirectoryFileStreamStreamWriterStreamReader等类的浅析