Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何转换通用列表<;MyClass>;到IList<;系统类型>;?_C#_Asp.net Mvc_List_Generics - Fatal编程技术网

C# 如何转换通用列表<;MyClass>;到IList<;系统类型>;?

C# 如何转换通用列表<;MyClass>;到IList<;系统类型>;?,c#,asp.net-mvc,list,generics,C#,Asp.net Mvc,List,Generics,我正在尝试将包含产品的列表转换为类型列表,以返回到另一个方法。我的方法是这样的: public IList<Type> GetProducts() { var products = new List<Products>() { new Products { ID="1",Name="Soap",Price="200"}, new Products { ID="2",Name="Trouser",Price="300"},

我正在尝试将包含产品的列表转换为类型列表,以返回到另一个方法。我的方法是这样的:

public IList<Type> GetProducts()
{
    var products = new List<Products>()
    {
        new Products { ID="1",Name="Soap",Price="200"},
        new Products { ID="2",Name="Trouser",Price="300"},
        new Products { ID="3",Name="Shirt",Price="400"}
    }.ToList();

    return products;
}
public IList GetProducts()
{
var products=新列表()
{
新产品{ID=“1”,Name=“Soap”,Price=“200”},
新产品{ID=“2”,Name=“trooser”,Price=“300”},
新产品{ID=“3”,Name=“Shirt”,Price=“400”}
}.ToList();
退货产品;
}
错误:给我一个错误,说明无法将产品列表转换为System.Type列表


有人能给我一个解决这个问题的方法吗。提前谢谢你

好吧,让我们回顾一下你写的内容:

  • public IList GetProducts()
    基本上意味着返回一个Type对象的列表,但在方法体中基本上说是
    返回新列表这显然是无法做到的,因为它与方法签名相矛盾。您可以
    返回产品将选择列表中对象的类型

  • 你为什么要这么做?您正在创建相同类型的列表,产品,返回的列表将包含所有相同的对象(产品类型)

  • 你能说得更具体些吗,你想达到什么目的

  • 试试这个:

    public IList<Products> GetProducts()
    {
        var products = new List<Products>()
        {
            new Products { ID="1",Name="Soap",Price="200"},
            new Products { ID="2",Name="Trouser",Price="300"},
            new Products { ID="3",Name="Shirt",Price="400"}
        }.ToList();
    
        return products;
    }
    
    public IList GetProducts()
    {
    var products=新列表()
    {
    新产品{ID=“1”,Name=“Soap”,Price=“200”},
    新产品{ID=“2”,Name=“trooser”,Price=“300”},
    新产品{ID=“3”,Name=“Shirt”,Price=“400”}
    }.ToList();
    退货产品;
    }
    

    返回类型应该是
    IList
    ,而不是
    IList

    一点由@ice jovanoski编写的答案的中间版本。它使用“产品。选择(x=>x.GetType()).ToList()

    公共静态IList GetProducts()
    {
    var products=新列表()
    {
    新产品{ID=“1”,Name=“Soap”,Price=“200”},
    新产品{ID=“2”,Name=“trooser”,Price=“300”},
    新产品{ID=“3”,Name=“Shirt”,Price=“400”}
    }.ToList();
    返回产品。选择(x=>x.GetType()).ToList();
    }
    
    产品
    对象
    的后代,而不是
    类型
    。是的,但我必须返回一个T类型列表。您也可以返回:新列表{typeof(Products)},因为它是列表中唯一可用的类型。#Uno,我也尝试了您的方法,并给出了相同的错误-“Products是一个变量,但像类型一样使用”问题:在您的
    IList
    中,您是否在项目中的其他地方定义了
    Type
    ?例如
    MyNamespace.Type
    ?或者您希望调用返回一个
    System.Type
    列表吗?这里我只想将一个T类型列表a发送给另一个方法。与我在示例中使用产品的方式相同,我还有其他类,我也需要使用它们。
    products.Select(x=>typeof(x)).ToList()你可以这样做,并得到任何对象列表的类型列表。这对我不起作用。我试过了。给我一个错误。“产品是一个变量,但像类型一样使用”试试这个。。返回产品。选择(x=>x.GetType()).ToList();谢谢你的指导。可以:)不,我必须返回一个T类型列表。这是一个要求。您不必在GetProducts中执行.ToList()两次。在返回语句中只做一次就足够了。@Dayan你真的不清楚为什么需要这个。调用代码将如何处理
    列表{typeof(Product)、typeof(Product)、typeof(Product)}
        public static IList<Type> GetProducts()
        {
            var products = new List<Products>()
            {
                new Products { ID="1",Name="Soap",Price="200"},
                new Products { ID="2",Name="Trouser",Price="300"},
                new Products { ID="3",Name="Shirt",Price="400"}
            }.ToList();
    
            return products.Select(x => x.GetType()).ToList();            
        }