C# 从Enumerable.Range到Z的字符列表
我想从Enumerable.Range创建一个列表。这个代码正确吗C# 从Enumerable.Range到Z的字符列表,c#,.net,linq,C#,.net,Linq,我想从Enumerable.Range创建一个列表。这个代码正确吗 SurnameStartLetterList = new List<char>(); Enumerable.Range(65, 26).ToList().ForEach(character => SurnameStartLetterList.Add((char)character)); name=新列表(); Enumerable.Range(65,26).ToList().ForEach(character
SurnameStartLetterList = new List<char>();
Enumerable.Range(65, 26).ToList().ForEach(character => SurnameStartLetterList.Add((char)character));
name=新列表();
Enumerable.Range(65,26).ToList().ForEach(character=>namestletterlist.Add((char)character));
或者有更好的方法来创建这种类型的列表吗?嗯,
字符串是IEnumerable
,所以这也可以:
"ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToList()
你必须权衡这件事的利弊
优点:
- 上面的代码比循环更容易阅读(主观,这是我的观点)
- 较短的代码(但可能不足以说明太多)
缺点:
- 如果您不知道
.ToList()
将如何处理字符串,则更难阅读
- 例如,如果可能会引入错误,您是否可以在此处轻松发现错误:
"ABCDEFGHIJKLMN0PQRSTUVWXYZ".ToList()
简单地说,我的意思是,当你只是在阅读代码时,你会发现错误,而不是如果你知道这里有问题并去寻找它
也许是这样
var surnameList = Enumerable.Range('A', 'Z' - 'A' + 1).
Select(c => (char)c).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);
}
新列表{'A','B',…'Z'}
我现在就闭嘴。但是我应该说:你的Range()
不应该是Range(65,26)
?第二个参数不是结束号,而是范围的长度。您是对的。我注意到并立即纠正了它。我真的很喜欢这个解决方案,我最初的反应是不可能的,不能那样做,但确实如此。比如。。返回挪威语中的所有大写字母:)啊,这是一个完全不同的问题:)我试着循环所有65536个字符的值,识别字母类别中的大写字符,结果是937个字符。我想这比挪威字母表要多一些Enumerable.Range(065536)。选择(c=>(char)c)。其中(c=>char.isleter(c))。其中(c=>char.IsUpper(c))
Unicode超过65536,确切地说是在Unicode 6中109384。地址空间为32位。NET似乎没有提供任何方法来返回一种语言的所有字母,所以不确定如何实现。哈哈!我错误地复制了你发布的第二个版本(编号为0
)。我很高兴在我开始拔头发之前就抓到了它!如果你的目的是用IList
代替列表
,你可以直接使用“ABCDEFGHIJKLMNOPQRSTUVWXYZ”
。啊,“神奇”字符串的问题。也许是一个带有注释的循环?
Console.WriteLine(Range('a', 'f').Contains("Vive La France!"[6]));