Path.GetExtension(file.FileName)给出可能的空引用警告
本文关键字:警告 引用 GetExtension file FileName Path | 更新日期: 2023-09-27 18:13:14
当我添加".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;
}
}
因为ToLowerInvariant()
是在Path.GetExtension()的结果上调用的。不能保证Path.GetExtension()将返回任何有意义的内容(if文件)。文件名为空(例如)。
最好检查路径的结果。GetExtension不是空的,在你调用它之前。(或调用文件上的ToLower())。文件名,在你把它放入GetExtension()之前,无论哪种方式,确保你确切地知道你放入GetExtension()的内容,否则你不能保证你得到的将是你想要的)。
所以MSDN说GetExtension只会返回null如果你传入的FileName是null
指定路径的扩展名(包括句点"。"),或none [Null]或String.Empty。如果path为none [Null],则返回GetExtension(空)。如果path没有扩展信息,则使用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
}
}
}
听起来像是一个错误的警告。
所以听起来像ReSharper不理解Path.GetExtension(file.FileName)
在你的测试和ToLowerInvariant
中使用的时间之间不会改变。
这是一个更明确的警告,您只需要检查是否为空。
下面是一个例子:
var extension = Path.GetExtension(myFile.FileName);
if (extension == null || extension.ToLower() != ".jpg")
{
lblOutput.Text = @"The file must have an extension of JPG";
return;
}
好吧,我有同样的问题,简单的修复是
确保在你的。cshtml文件中表单post方法有
enctype ="多部分/form-data"
<form method="post" asp-for="Upsert" enctype="multipart/form-data">