有没有办法检查字符串是否不等于多个不同的字符串?

Cha*_*eus 5 .net c# string validation string-comparison

我想通过文件扩展名验证文件上传器.如果文件扩展名不等于.jpg,.jpeg,.gif,.png,.bmp,则抛出验证错误.

有没有办法在不循环每种类型的情况下执行此操作?

Jon*_*eet 28

只需构建一个集合 - 如果它很小,几乎任何集合都可以:

// Build the collection once (you may want a static readonly variable, for
// example).
List<string> list = new List<string> { ".jpg", ".jpeg", ".gif", ".bmp", ... };

// Later
if (list.Contains(extension))
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

这确实会循环所有的值 - 但对于小型集合,这不应该太昂贵.对于大量的字符串集合,您需要使用类似的字符串HashSet<string>,这样可以提供更高效的查找.

  • 对于一个小集合,我想象对值的迭代甚至可能比更复杂的基于散列的集合更快. (2认同)

fix*_*gon 5

您可以使用 !Regex.IsMatch(extension, "^\.(jpg|jpeg|gif|png|bmp)$")

但在内部某种程度上它仍将循环