Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从Enumerable.Range到Z的字符列表_C#_.net_Linq - Fatal编程技术网

C# 从Enumerable.Range到Z的字符列表

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

我想从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=>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]));