zoukankan      html  css  js  c++  java
  • C#学习你需要知道的---(For和Foreach)

    本文章由cartzhang编写,转载请注明出处。 所有权利保留。
    文章链接:http://blog.csdn.net/cartzhang/article/details/52577283
    作者:cartzhang

    一.字符串的索引可以有多个参数的。

    常见的为:

    public string this[string key] {
      get { return internalDictionary[key]; }
    }

    比如:

    x = test["a"];

    但是也可以这样:

     x = something[“a”, “b”, “c”, “d”]
    public IEnumerable<string> this[params string[] keys] 
    {
      get { return keys.Select(key => internalDictionary[key]).AsEnumerable(); }
    }

    得到的结果就逐次输出。

    二. 字符串在代码中多次使用,其实就一个实例。

    C#对字符串有字符串驻留,也就是string interning。每次在编译器中被使用就在内存列表中添加一个索引到runtime中。
    可以使用String.Inter(“chakknsls”)来查看。

    String.Intern(“what”) == “what”

    这个代码总会返回true,因为在本代码中已经定义了一个string.
    String.IsInterned(“wh” + “at”) == “what”由于编译器的优化,这个同样返回True。
    而下面这个只在你程序中或Runtimed 其他地方定义了Runtime的时候,才会返回true.

    String.IsInterned(new string(new char[] { ‘w’,’h’,’a’,’t’ }) == new string(new char[] { ‘w’,’h’,’a’,’t’ }) 

    更要注意的是

     (object)”Hi” == (object)”Hi”  

    这个在应用程序中会返回True,但是若Debug它就会返回False。因为debug不会看string的intern.

    这个暂时不理解。VS测试一下,在Debug下也一直都为true。可能是版本变化升级吧

    三. 静态变量

    static class Program {
      private static int a = 5;
      private static int b = a;
    
      static void Main(string[] args) {
       Console.WriteLine(b);
      }
    }

    静态遍历在初始化时候,并不按照编写顺序执行,所以这样有机会造成输出为零的概率。

    四. For 循环和ForEach 的效率问题

    在于for循环不会产生多余的操作。
    而ForEach会产生多余操作。主要原因在于编译器的理解不同。使用的算法不同。在ForEach中,有不必要的状态比较。
    但是不同的.Net 版本之间的差异也是比较大的。

    1).Net 3.5 版本的For循环

    这里写图片描述
    //

    2).Net 3.5 版本的Foreach循环

    这里写图片描述

    3).Net 4.5 版本For循环

    这里写图片描述

    4).Net 4.5 版本Foreach循环

    这里写图片描述
    3.5和和4.5.2差别还是蛮大的。
    后来的.Net优化挺厉害的。个人觉得For和ForEach没有太多差,从命令上来看貌似Foreach更少命令。但是就执行时间这就不好说了,个人觉得基本没差。

    五.参考:


    http://www.codeproject.com/Articles/6759/FOREACH-Vs-FOR-C
    https://damieng.com/blog/2012/10/29/8-things-you-probably-didnt-know-about-csharp

    若有问题,随时联系!!!
    非常感谢!!!
    —————————THE————END——————————-

  • 相关阅读:
    使用paramiko的问题记录
    python常见异常及解决方法
    linux ps -aux各列含义
    常用技能
    超时程序管理
    跨年的总结和展望
    java json和对象互转
    一些常用功能总结
    ResultSet转成java类对象
    python常用功能总结
  • 原文地址:https://www.cnblogs.com/qitian1/p/6461899.html
Copyright © 2011-2022 走看看