如果我输入了一个字符串,可以检查第一个字母是否确实是从字符串列表中输入的:
var dir = "FOLDERNAME";
var list = new List<string>() { "a", "b", "c", "d", "e", "f", "g", "s",
"t", "u", "v", "w", "z", "y", "z",
"1", "2", "3", "4", "5", "6", "7", "8", "9"};
if (!dir.ToLower().!StartsWith :MagicLinq: list) { Do Stuff; }
还是我必须走正则表达式路线?
答案 0 :(得分:2)
您可以检查第一个字母是否在列表中:
if (list.Contains(""+dir[0])){}
答案 1 :(得分:2)
一种考虑的方法:
var lower = new string(dir?.FirstOrDefault() ?? new char(), 1);
if (list.Contains(lower) {
第一行从字符串中获取第一个字符,并处理空字符串和null
字符串(通过获取空字符),然后将char
加载到string
中。 / p>
您可以简化一下,如果List<string>
是List<char
或HashSet<char>
。然后,您可以删除new string
部分。
答案 2 :(得分:1)
如果使用HashSet<>
进行多次检查会比linear search上的List<>
有更好的性能。即使性能不是问题,HashSet<>
也可能更好地表示数据及其使用方式,因为每个元素都是唯一的,并且排序无所谓。
这里我使用的是HashSet<>
中的char
...
var dir = "FOLDERNAME";
var restrictedChars = new HashSet<char>(
new[] {
'A', 'B', 'C', 'D', 'E', 'F', 'G',
'S', 'T', 'U', 'V', 'W', 'Z', 'Y', 'Z',
'1', '2', '3', '4', '5', '6', '7', '8', '9'
}
);
if (!restrictedChars.Contains(dir[0]))
{
// Do stuff...
}
请注意,由于不区分大小写的比较,char.ToUpper()
/ char.ToUpperInvariant()
是recommended way to normalize case,因此我将限制字符从小写改为大写。然后,您可以像这样不区分大小写的方式执行检查...
if (!restrictedChars.Contains(char.ToUpperInvariant(dir[0])))
{
// Do stuff...
}
或者,您可以使用HashSet<>
个string
中的一个,并传入不区分大小写的StringComparer
实例...
var dir = "FOLDERNAME";
var restrictedChars = new HashSet<string>(
new[] {
"a", "b", "c", "d", "e", "f", "g",
"s", "t", "u", "v", "w", "z", "y", "z",
"1", "2", "3", "4", "5", "6", "7", "8", "9"
},
StringComparer.OrdinalIgnoreCase
);
// Get a string from Substring() instead of dir[0].ToString()
if (!restrictedChars.Contains(dir.Substring(0, 1)))
{
// Do stuff...
}
通过这种方法,将受限制的字符string
馈入HashSet<>
的情况无关紧要。
答案 3 :(得分:0)
这就是我要做的
String dir = "FOLDERNAME";
var MyList = new List<string>() { "a", "b", "c", "d", "e", "f", "g", "s",
"t", "u", "v", "w", "z", "y", "z",
"1", "2", "3", "4", "5", "6", "7", "8", "9"};
Console.WriteLine((MyList.IndexOf(dir.Substring(0, 1).ToLower()) != -1) ? "True" : "False");
Console.ReadLine();