抽象自定义泛型小笔记

public static class SomethingFactory<T> where T:MyObj

        这样在使用SomethingFactory的时候就只能传入MyObj类型或MyObj的派生类型啦

        注意:

          还可以写成这样

          where T:MyObj,new()

          来约束传入的类型必须有一个构造函数。  

在实际开发中,我们也经常需要定义自己的泛型类型

        来看下面的代码:        

复制代码
          public static class SomethingFactory<T>
          {
              public static T InitInstance(T inObj)
              {
                  if (false)//你的判断条件
                  {
                      //do what you want...
                      return inObj;
                  }
                  return default(T);
              }
          }
复制代码

        这段代码的消费者如下:        

              var a1 = SomethingFactory<int>.InitInstance(12);
              Console.WriteLine(a1);
              Console.ReadKey();

        输出的结果为0

如果你想返回T类型的空值,那么请用default(T)这种形式

            因为你不知道T是值类型还是引用类型,所以别擅自用null

注意:如果这里使用Hashtable、Queue或者Stack等非泛型的容器

        就会导致装箱操作,损耗性能。因为这些容器只能存储Object类型的数据

      <2>泛型类型

        List<T>、Dictionary<TKey, TValue>等泛型类型都是.net类库定义好并提供给我们使用的

 <1>做foreach循环时多考虑线程安全性      

        在foreach时不要试图对被遍历的集合进行remove和add等操作

        任何集合,即使被标记为线程安全的,在foreach的时候,增加项和移除项的操作都会导致异常

        (我在这里犯过错)

      <2>IEnumerable接口是LINQ特性的核心接口

        只有实现了IEnumerable接口的集合

        才能执行相关的LINQ操作,比如select,where等

        这些操作,我们接下来会讲到。

原文地址:https://www.cnblogs.com/x-poior/p/5163100.html