C#泛型但是通信兼容类型?

时间:2015-04-08 15:18:50

标签: c# generics

问题:如何通知我的通用方法可以使用哪些类型?

我想使用泛型来创建与三种或四种不同类型(而不是所有类型)兼容的方法。这是一个人为的例子:

 public List<T> GetAll<T>()
 {
      Type typeParameterType = typeof(T);
      if(typeParameterType == typeof(string))
      {
           var myList = new List<string>() { "one", "two", "three" }; 
           return myList.Cast<T>().ToList(); 
      }
      else if (typeParameterType == typeof(int))
      {
           var myList = new List<int>() { 1, 2, 3 };
           return myList.Cast<T>().ToList();
      } 
      return new List<T>(); 
 }

 var intResult = GetAll<int>();
 var stringResult = GetAll<string>(); 

这里我使用int和string,但在我的真实代码中,它们将是类对象。这个功能很好,但是对于其他程序员来说,他们不知道他们可以投入什么呢?&lt; T&gt;因为它支持的逻辑是内部的。

有没有什么方法可以说GetAll&lt; int&gt;,GetAll&lt; string&gt;,GetAll&lt; bool&gt;等,这样intellisense会&#34;看&#34;它能够将其传达给我的代码用户。

我正试图摆脱这种风格:

  public List<int> GetAllInt();   
  public List<int> GetAllString(); 
  public List<int> GetAllBool();     

因为它使界面膨胀。我希望他们能够看到他们可以做的一小部分功能,然后在他们选择活动之后选择类型,所以像GetAll&lt; int&gt;()对我来说似乎更清晰。但无法沟通兼容的东西是一个障碍。

我已经看到T:IMyInterface确实限制了他们可以发送的内容,但它并没有沟通他们可以发送的内容。

1 个答案:

答案 0 :(得分:1)

没有良好的表达方式,因为这并不意味着如何使用泛型。你最接近的是通过intellisense:

/// <summary>Although this looks generic, it only really works
/// for String, Int32, Boolean; sorry 'bout that</summary>
public List<T> GetAll<T>() {...}