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();
}