C# 转换列表<;对象>;对于泛型参数T,当使用T调用泛型方法时,类型为List<;myClass>;
在诸如:C# 转换列表<;对象>;对于泛型参数T,当使用T调用泛型方法时,类型为List<;myClass>;,c#,.net,generics,C#,.net,Generics,在诸如:public T getList()之类的通用方法中, 我有一个列表,我需要将它转换为T类型以返回它 public T getList<T>() { List<object> someObjects = getListObject(); // Get object from any where. return (dynamic)someObjects; // Casting don't work } 它工作得很好,但是我需要将这个方法用于T
public T getList()
之类的通用方法中,
我有一个列表,我需要将它转换为T类型以返回它
public T getList<T>()
{
List<object> someObjects = getListObject(); // Get object from any where.
return (dynamic)someObjects; // Casting don't work
}
它工作得很好,但是我需要将这个方法用于T的类型
List
,我认为您的getList
方法的定义有点错误。您希望返回一个通用列表。我使您的实现是静态的,但不需要是静态的。getList
方法也可以是实例方法
希望这就是您所需要的:
public class TemplateExamples
{
public static List<T> getList<T>()
{
List<T> someObjects = new List<T>();
return someObjects;
}
}
公共类模板示例
{
公共静态列表getList()
{
List someObjects=new List();
返回一些对象;
}
}
下面是一个使用它的示例:
public class TestTemplateExamples
{
public static void Main()
{
var intList = TemplateExamples.getList<int>();
var stringList = TemplateExamples.getList<string>();
var templateList = TemplateExamples.getList<TemplateExamples>();
}
}
公共类TestTemplateExamples
{
公共静态void Main()
{
var intList=TemplateExamples.getList();
var stringList=TemplateExamples.getList();
var templateList=TemplateExamples.getList();
}
}
Thnx对于,可以将给定的列表
分配或强制转换为列表
,但可以将列表
中的每个元素强制转换为T
,如果没有错误,则返回该值
但是,您无法轻松获取传入类型的泛型类型参数,因此需要传入元素类型:
public List<T> getList<T>() {
List<object> someObjects = getListObject(); // Get object from any where.
return someObjects.Cast<T>().ToList();
}
public List getList(){
列出someObjects=getListObject();//从任何位置获取对象。
返回someObjects.Cast().ToList();
}
这使用LINQ
Cast
方法对每个元素进行强制转换,并根据结果创建一个新的列表。那么,如果有人将int
作为泛型参数传递,或字符串
,或字典
,您希望您的方法做什么?如果你的方法只能返回一个列表,而不是任何类型,那么它应该返回一个列表,而不是泛型类型。在返回任何类型之前,都有一些基于value.GetType()
的测试。不要编写方法说它可以返回任何类型,如果它不是受支持的类型,则在运行时失败,而应该编写该方法,使其始终返回该类型,并且在运行时不会失败。不,我想这样使用它:var intList=TemplateExamples.getList()代码>或var stringList=TemplateExamples.getList()
在
中指定列表
很重要,我不确定您为什么需要这样做。你能补充更多的细节吗?为什么将列为类型很重要?我不知道为什么,但这是我读过的最令人困惑的问题。@Neil.Work你是指我在评论中的问题还是原始发布的问题?@I.do.stuff原始问题我觉得很困惑。我认为你的回答就足够了。
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>();
}
}
public List<T> getList<T>() {
List<object> someObjects = getListObject(); // Get object from any where.
return someObjects.Cast<T>().ToList();
}