检查字符串是否不以 List<string> 中的任何字母开头

Check that string does not start with any letters from List<string>

如果我输入了一个字符串,是否可以检查第一个字母是否以字符串列表中的输入开头:

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; }

还是我必须走正则表达式路线?

您可以检查第一个字母是否在列表中:

if (list.Contains(""+dir[0])){}

要考虑的一种方法:

var lower = new string(dir?.FirstOrDefault() ?? new char(), 1);
if (list.Contains(lower) {

第一行从字符串中获取第一个字符,并处理空字符串和 null 字符串(通过获取空字符),然后将 char 加载到 string .

如果 List<string>List<charHashSet<char>,您可以简化它。然后你可以删除 new string 部分。

我就是这样做的

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();

如果此检查将使用 HashSet<> would be more performant than a linear search on a List<> 进行多次。即使性能不是问题,HashSet<> 也可能更好地表示数据及其使用方式,因为每个元素都是唯一的并且排序无关紧要。

这里我使用了 charHashSet<>...

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() are the recommended way to normalize case 以来,我将受限字符从小写更改为大写,以进行不区分大小写的比较。然后您可以像这样以不区分大小写的方式执行检查...

if (!restrictedChars.Contains(char.ToUpperInvariant(dir[0])))
{
    // Do stuff...
}

或者,您可以使用 stringHashSet<> 并传入不区分大小写的 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...
}

使用这种方法,输入 HashSet<> 的受限字符 string 的大小写无关紧要。