问题:如何通知我的通用方法可以使用哪些类型?
我想使用泛型来创建与三种或四种不同类型(而不是所有类型)兼容的方法。这是一个人为的例子:
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确实限制了他们可以发送的内容,但它并没有沟通他们可以发送的内容。
答案 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>() {...}