为什么要用'';

本文关键字:为什么 | 更新日期: 2023-09-27 17:58:00

我在一个同事的项目中偶然发现了这一点:

foreach (var invalidChar in Path.GetInvalidFileNameChars())
    fileName = fileName.Replace(invalidChar, ''0');

gerenal的想法很明显,但我想知道他为什么选择用null字符的文字代替无效字符,而不是"常规"字符或只是一个空字符串。

我想这个选择有一个很好的理由(写这篇文章的人是我们团队的一名大四学生),我只想知道这个原因是什么。

为什么要用'�';

在评论完这个问题后,我正在寻找文件名实际上不允许''0的证据。我找到了:

使用当前代码页中的任何字符作为名称,包括Unicode字符和扩展字符集(128–255)中的字符,但以下字符除外:
*以下保留字符:<(小于)、>(大于)、:(冒号)、"(双引号)、/(正斜杠)、''(反斜杠)、|(竖线或竖线)、?(问号)、*(星号)
*整数值零,有时称为ASCII NUL字符
*整数表示形式在1到31之间的字符,但允许使用这些字符的备用数据流除外。

这取决于代码运行的OperationSystem。但在Windows上,字符'0(0表示int)在fileName的无效字符列表中。

LinqPad(在Windows 10上运行):

Path.GetInvalidFileNameChars().Contains(''0').Dump(); //true

我认为这段代码是从另一种语言移植到.net.的

如果文件名包含无效字符,最好抛出异常(如果用户指定了名称),而不是用任何字符替换它们。

如果你需要替换它们,你应该选择一个字符,比如_,以明确可能有替换的东西。

根据一些智者的说法,没有空字符。还应避免混淆空格(")和空字符串("")。