• 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字符串



  • 相关阅读:
    LeetCode15 3Sum
    LeetCode10 Regular Expression Matching
    LeetCode20 Valid Parentheses
    LeetCode21 Merge Two Sorted Lists
    LeetCode13 Roman to Integer
    LeetCode12 Integer to Roman
    LeetCode11 Container With Most Water
    LeetCode19 Remove Nth Node From End of List
    LeetCode14 Longest Common Prefix
    LeetCode9 Palindrome Number
  • 原文地址:https://www.cnblogs.com/witer666/p/922394.html
Copyright © 2020-2023  润新知