C# 随笔 【ToList().Foreach()和Foreach()】

   1. 最近在作一个Socket通信的例子,可是若是使用UTF-8编码传输中文的话取和的会不同。早上作了测试 。程序员

    string str = "a我。.";看代码中间是一个英文,一个中文一个中文的句号和一个通常的句号,按照全角占两字节,中文占两字节,算出来该是6个字节才行:测试

   在下面的测试中:编码

          

  string str = "a我。.";

            Console.WriteLine(Encoding.Default.GetByteCount(str)); //6
            Console.WriteLine(Encoding.ASCII.GetByteCount(str));   //4
            Console.WriteLine(Encoding.UTF32.GetByteCount(str));  16
            Console.WriteLine(Encoding.UTF8.GetByteCount(str));    8

            因此在通迅中要取得长度该用 Encoding.Default.GetByteCount(str);spa

2.接下来引出正题,在上面的测试后,我接下来想显示各个Byte,在我之前的写法中,我习惯 Encoding.Default.GetByteCount(str).ToList().Foreach();以前也测试过这样效果不是很好,比通常的Foreach慢,而后就本身写了个扩展方法,扩展方法很简单,直接针对IEnumable<T>扩展就好了,但是写完事后以为很奇怪,foreach是很是简单的了,为何微软的foreach必需要是list才行呢,直到如今也没有答案,我只是以为是否是微软的程序员里面也有脑壳发热的,晚上无聊就反编译看了下源码,里面东西很少,可是以为很奇怪,作个标记,之后再研究了。blog