【问题标题】:Null Object Pattern for FileInfoFileInfo 的空对象模式
【发布时间】:2013-11-28 12:48:03
【问题描述】:

我有一个返回FileInfo-object 的方法。在调用方法fooFile.FullName 之后被调用。

一切都好,但在某些情况下FileInfo 可以是null,但我不想(丑陋的)空检查调用该方法的位置。

我需要的是某种 null-FileInfo (Null-Object-Pattern)。调用fooFile.FullName 返回一个空字符串就足够了。 不幸的是new FileInfo(string.Empty) 不起作用。

搜索所以带上这个java-question,但答案对我没有帮助。

有没有办法将FileInfo 与 Null-Object-Pattern 结合使用?

【问题讨论】:

  • 如果一个对象可以为空,那么空检查并不难看。但您也可以使用Try-模式:FileInfo fi; if(TryGetFile(path,out fi)){}
  • @Tim Schmelter:感谢蒂姆的意见。我的方法在很多地方都使用过。所以我不会为每个调用实施(冗余)空检查。 TryGetFile 很有趣,但同样的问题。

标签: c# .net file design-patterns fileinfo


【解决方案1】:

您可以在需要的地方使用?? 运算符来使用默认的FileInfo,并在某处使用一个静态变量来表示默认的文件信息:

public void MyMethod(FileInfo fi)
{
    // use default fileinfo if null is passed to this method
    fi = fi ?? DefaultFileInfo.Value;

    // method code...
    // do something with the fileinfo, it is not null for sure now.
}

默认文件信息类:

public static class DefaultFileInfo
{
    public static readonly FileInfo Value = new FileInfo("null");
}

如果你想让默认文件可读,当然你需要指定一个有效的文件名。

【讨论】:

  • 谢谢!这让我走上了正确的道路。我尝试new FileInfo(string.Empty);,但您的new FileInfo("null"); 可以满足我的需要。为此 +1。
【解决方案2】:

空检查到底有什么问题?没看懂你的意思... 如果你真的想避免这种空检查,你可以使用扩展方法,但我不建议你这样做......

public static class Extensions
{
    public static string GetFullName(this FileInfo fInfo)
    {
        if (fInfo == null)
        {
            return String.Empty;
        }
        return fInfo.FullName;
    }
}

然后

FileInfo fInfo = // ... ;
string fullName = fInfo.GetFullName();

【讨论】:

  • 感谢您的回答(为此 +1)。我不想要这种空检查,因为每次我(或其他人)使用该方法时,我都必须认为空检查是必要的。如果我(或其他人)忘记它,可能会导致我出现运行时异常。
  • 您不必每次都检查!检查在扩展方法中完成。
  • FileInfo fInfo = null; string fullName = fInfo.GetFullName()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-26
  • 1970-01-01
相关资源
最近更新 更多