【问题标题】:What type should I use to indicate an argument is a filename in C#?我应该使用什么类型来指示参数是 C# 中的文件名?
【发布时间】:2015-04-20 16:36:49
【问题描述】:

我的函数需要一个文件名,以便它可以读取和/或写入该文件。 为此,我可以使用一个简单的字符串

void myFunc(string filename)

但我宁愿通过要求更专业的类型来获得更多的类型安全性,而不是检测到 "" 在方法中不是有效的文件名。

File 类不起作用,因为它是静态的。

可以使用 FileInfo 类,但我不记得我遇到过这种类型的文件名参数。

在个人项目中,我创建了自己的类,它只是简单地检查文件名是否格式正确等,例如在创建文件名时引发异常,而不是在方法本身中。

由于新项目的范围更广,我认为最好使用一个通用标准,以免混淆其他用户(或几周后我的未来自己)。

【问题讨论】:

  • 为什么不能只使用 File.Exists 来查看文件是否存在? msdn.microsoft.com/en-us/library/…
  • @user3444160 如果该方法需要一个文件并且用户将其他适合的内容传递到字符串中,我宁愿在调用该方法之前 出现异常。这也是一个明确的声明,更难误用。

标签: c# arguments


【解决方案1】:

你对FileInfo 的想法是正确的——它唯一的构造函数有一个fileName 参数,它会为你执行基本的验证。来自MSDN

public FileInfo(string fileName)

【讨论】:

  • 您还可以将文档 cmets 添加到函数中。如果他们使用 Visual Studio,他们可以在之前的行中键入 /// 以生成文档(这也将在 intelli-sense 中获取)
  • 如果参数的类型是 FileInfo 并且文件将被读取/写入,您个人是否希望您必须提供文件名?虽然它是标准类型,但我觉得我会误用它用于其他目的......
【解决方案2】:

如果您发现 FileInfo 出于某种原因不足,您可能正在以更接近于System.Uri 的方式处理文件名。 Uri 不一定总是与文件相关,但文件路径可以是 Uri 的一个示例,Microsoft 的实现通过 IsFile 属性支持这一点。可以想象一个继承自 Uri 和 IsFile 的 FileUri 类是强制的。

可能值得一提的是,在我查看的大多数 MSDN sn-ps 中,文件路径和名称只是作为字符串传递。不过,这可能只是为了方便。

【讨论】:

  • 文件(路径)表示为字符串也是我发现的。我想这主要是出于历史原因。
猜你喜欢
  • 2023-03-04
  • 1970-01-01
  • 2010-12-23
  • 1970-01-01
  • 1970-01-01
  • 2017-04-14
  • 2023-04-05
相关资源
最近更新 更多