【问题标题】:Path.GetExtension(file.FileName) gives possible Nullreference warningPath.GetExtension(file.FileName) 给出可能的 Nullreference 警告
【发布时间】: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) 的完整路径。还要检查路径是否为空

标签: c# .net resharper nullreferenceexception


【解决方案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">
        

        【讨论】:

          猜你喜欢
          • 2021-08-27
          • 1970-01-01
          • 2012-08-10
          • 1970-01-01
          • 1970-01-01
          • 2018-07-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多