• C#一些基本知识


          今天下午在看C#3.0编码规范,看到一些自己不明白比较模糊的代码,特发上来珍藏,这些代码有时候还是比较有用的.
      class @class {  public static void @static(bool @bool) {   if (@bool)    System.Console.WriteLine("true");   else    System.Console.WriteLine("false");  }  }

     @指你如果真的无法避免用C#关键字的话那就在关键字前面加上@,代码编译时就不会报错
     lock
    {
    }
    unlock
    {
    }
     lock,unlock一般用在多线程中,用于锁定和解锁一个代码段,防止两个线程同时用一段代码

    check
    {
    }
    uncheck
    {
    }
     check,uncheck用于检查代码段中的数据类型是否超出边界,check检查,uncheck不检查,uncheck超出边界时不发出异常,自动返回数据类型的最小值mixValue.

    yield return C#中的枚举器

    使用C# 2.0 这些问题如同五月末的雪般融化了。在这个例子的2.0版本中,我重写上面的列表,使用C# 2.0的两个新特性:泛型 和 枚举器。

    我以重新定义实现IEumerable<string>的ListBox作为开始:

    public class ListBox : IEnumerable<string>

    这样做确定这个类可以在foreach循环中使用,同时确保迭代的值是string类型。

    现在,从上个例子中挪去整个嵌套类,并且用下面的代码替换 GetEnumerator方法。

    public IEnumerator<string> GetEnumerator()

    {

       foreach (string s in strings)

       {

          yield return s;

       }

    }

    GetEnumerator方法使用了新的 yield 语句。yield语句返回一个表达式。yield语句仅在迭代块中出现,并且返回foreach语句所期望的值。那也就是,对GetEnumerator的每次调用都将会产生集合中的下一个字符串;所有的状态管理已经都为你做好了!

    就这样了,你已经完成了。不需要为每个类型实现你自己的enumerator,不需要创建嵌套类。你已经移除了至少30行代码,并且极大地简化了你的代码。程序继续像期望的那样运行,但是状态管理不再是你的任务,所有的都为你做好了。更进一步,由枚举器所返回的值一定是string类型,如果你想要返回其他类型,你可以修改IEnumerable泛型语句,IEnumerable泛型语句将反射新类型。

    关于Yield的更多内容

    作为对上面的一些旁注,很值得告诉你,实际上,你可以在yield语句块中yield一个以上的值。这样,下面的语句是完全正确的C#语句:

    public IEnumerator GetEnumerator()

    {

     yield return "Who";

     yield return " is";

     yield return "John Galt?";

    }

    假设上面的代码位于一个名为foo的类中,你可以这样写:

    foreach ( string s in new foo )

    {

       Console.Write(s);

    }

    输出结果将会是:

    Who is John Galt?

    如果你停下来思考一下,这也是之前的代码所做的事。它遍历了自己的foreach循环,并且产生出它所找到的每个string字符串



  • 相关阅读:
    非父子组件通信
    vue中的导航守卫
    vue中做出购物车的功能
    vuex初使用(写的当然是最简单的应用啦)
    封装了一个电商放大镜移入放大的功能,适用于VUE
    moment.js插件的简单上手使用
    Vue中如何将数据传递到下一个页面(超级简单哒)
    java Math
    java Arrays
    java static
  • 原文地址:https://www.cnblogs.com/witer666/p/922394.html
Copyright © 2020-2023  润新知