如何在c#中检查字符串是否包含无效的文件名字符?

如何在c#中检查字符串是否包含无效的文件名字符?,c#,string,search,C#,String,Search,我有一个字符串,我想检查它是否包含任何无效的文件名字符。我知道我可以用 Path.GetInvalidFileNameChars 获取无效文件名字符数组,并循环查看字符串是否包含任何无效字符。但是有一个更简单、更简短的表达吗?它是c#。有人能帮忙吗 bool containsInValidFilenameCharacters(string str) { return str.Any(Path.GetInvalidFileNameChars().Contains) } 请注意,这与

我有一个字符串,我想检查它是否包含任何无效的文件名字符。我知道我可以用

 Path.GetInvalidFileNameChars 
获取无效文件名字符数组,并循环查看字符串是否包含任何无效字符。但是有一个更简单、更简短的表达吗?它是c#。有人能帮忙吗

bool containsInValidFilenameCharacters(string str) {
    return str.Any(Path.GetInvalidFileNameChars().Contains)
}
请注意,这与执行相同

var invalidChars = Path.GetInvalidFileNameChars();
return str.Any(c => invalidChars.Contains(c));
但是由于
Contains的类型签名与
Any
的参数委托类型完全匹配,我们可以直接传递它,它将执行隐式转换

请注意,这与执行相同

var invalidChars = Path.GetInvalidFileNameChars();
return str.Any(c => invalidChars.Contains(c));

但是由于
包含的类型签名
Any
的参数委托类型完全匹配,我们可以直接传递它,它将进行隐式转换。

作为提醒,请记住,文件名也有其他方式无效,因此即使过滤掉所有无效字符,您仍然不能假定您拥有合法的文件名。:)谢谢你提醒我这件事。顺便问一下,你能给我一个用户案例吗?@Robin 1000个字符的字符串可能是无效的文件名。或者指向不存在的文件夹的文件名,或者指向存在但您无权访问的位置的文件名。(
NUL
AUX
CON
和其他一些)。最终的结果是,无论您如何预先丢弃“显然”错误的文件名,确保文件名有效的唯一方法是尝试创建或打开该文件。提醒您,记住还有其他方法可以使文件名无效,因此即使您过滤掉所有无效字符,您仍然不能假定您拥有合法的文件名。:)谢谢你提醒我这件事。顺便问一下,你能给我一个用户案例吗?@Robin 1000个字符的字符串可能是无效的文件名。或者指向不存在的文件夹的文件名,或者指向存在但您无权访问的位置的文件名。(
NUL
AUX
CON
和其他一些)。最终的结果是,无论您如何预先丢弃“显然”错误的文件名,确保文件名有效的唯一方法就是尝试创建或打开该文件。@Robin它是Linq的一部分。确保您的文件顶部有
using System.Linq
。@Robin因为您似乎不熟悉Linq,让我澄清一下。Linq的大多数入口点都实现为(不是最好的文章,但使扩展方法相对清晰)。只要包含正确的名称空间,这些名称空间就可见。像这样的工具可以在您使用扩展方法时进行检测,并为您包含正确的命名空间。@Robin它是Linq的一部分。确保您的文件顶部有
using System.Linq
。@Robin因为您似乎不熟悉Linq,让我澄清一下。Linq的大多数入口点都实现为(不是最好的文章,但使扩展方法相对清晰)。只要包含正确的名称空间,这些名称空间就可见。像这样的工具可以在您使用扩展方法时进行检测,并为您包含正确的命名空间。