在类似public T getList<T>()
的通用方法中,
我有一个列表,我需要将其转换为T型以返回它。
public T getList<T>()
{
List<object> someObjects = getListObject(); // Get object from any where.
return (dynamic)someObjects; // Casting don't work
}
我用T将此类型为List<myClass>
的方法称为这样:
List<myClass> myClassList = getList<List<myClass>>()
然后我有一个运行时异常,他说我无法将List<object>
转换为List<myClass>
很正常,我知道为什么。
但是我该怎么做呢?
我用这种方法尝试过同样的事情:
public List<T> getList<T>()
{
List<object> someObjects = getListObject(); // Get object from any where.
return (dynamic)someObjects.OfType<T>.ToList<T>; // that work good
}
现在我用T调用此方法的类型为myClass
,如下所示:
List<myClass> myClassObjects = getList<myClass>()
效果很好,但是我需要在T类型为List<myClass>
的情况下使用此方法
答案 0 :(得分:0)
我认为您的getList<T>
方法定义有点错误。您要返回通用列表。我将您的实现设为静态,但不必如此。 getList<T>
方法也可以是实例方法。
希望这是您所需要的:
public class TemplateExamples
{
public static List<T> getList<T>()
{
List<T> someObjects = new List<T>();
return someObjects;
}
}
这是使用它的示例:
public class TestTemplateExamples
{
public static void Main()
{
var intList = TemplateExamples.getList<int>();
var stringList = TemplateExamples.getList<string>();
var templateList = TemplateExamples.getList<TemplateExamples>();
}
}
Thnx
答案 1 :(得分:0)
对于reasons,可以将给定的List<object>
分配或强制转换为List<T>
,但是您可以将List<object>
中的每个元素强制转换为T
,如果没有错误,请返回。
但是,您不能轻易获得传入类型的泛型类型参数,因此您需要传入元素类型:
public List<T> getList<T>() {
List<object> someObjects = getListObject(); // Get object from any where.
return someObjects.Cast<T>().ToList();
}
这使用LINQ Cast
方法强制转换每个元素,并根据结果创建一个新的List<T>
。