从Enumerable.Range的字符的A到Z列表



我想从Enumerable.Range中创建一个列表。这个代码正确吗?

SurnameStartLetterList = new List<char>();
Enumerable.Range(65, 26).ToList().ForEach(character => SurnameStartLetterList.Add((char)character));

或者有没有更好的方法来制作这种类型的列表?

也许像这样?

var surnameList = Enumerable.Range('A', 'Z' - 'A' + 1).
                     Select(c => (char)c).ToList();

好吧,stringIEnumerable<char>,所以这个也可以:

"ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToList()

你必须权衡一下这件事的利弊。

优点:

  • 比你的循环更容易阅读上面的代码(主观的,这是我的意见)
  • 更短的代码(但可能不足以说明很多)

缺点:

  • 如果你不知道.ToList()将与字符串做什么,更难阅读
  • 可以引入bug,例如,你能很容易地发现这里的错误吗:

    "ABCDEFGHIJKLMN0PQRSTUVWXYZ".ToList()
    

    我的意思是,当你只是阅读代码时,你会发现错误,而不是如果你知道这里有问题,并去寻找它。

我根据Can的回答做了一个扩展函数:

public static IEnumerable<char> Range(char start, char end)
{
  return Enumerable.Range((int)start, (int)end - (int)start + 1).Select(i => (char)i);
}

用法:

Console.WriteLine(Range('a', 'f').Contains("Vive La France!"[6]));

相关内容

  • 没有找到相关文章

最新更新