Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.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# 泛型容器中的类型是什么_C#_Generics_Covariance - Fatal编程技术网

C# 泛型容器中的类型是什么

C# 泛型容器中的类型是什么,c#,generics,covariance,C#,Generics,Covariance,在上面的代码中,我需要知道是否可以将列表转换为传入的任何类型的列表,例如列表 有没有办法询问所包含类型的泛型?我可以得到列表,列表,列表等等 我可以将API拆分为在一个单独的方法中返回列表,其中传入包含的类型,因此要求调用方对列表使用一个方法,对简单类型使用一个方法。无论哪种方式,他们都必须知道会发生什么,但如果有一种顺利的方式来完成我的要求,我宁愿保持API的简单 注意:这是缺少协方差的一个解决方案,因为即使在包含的类型上定义了隐式转换运算符,将列表转换为T也会失败。所以,为了遵循b.Cast

在上面的代码中,我需要知道是否可以将列表转换为传入的任何类型的列表,例如列表

有没有办法询问所包含类型的泛型?我可以得到列表,列表,列表等等

我可以将API拆分为在一个单独的方法中返回列表,其中传入包含的类型,因此要求调用方对列表使用一个方法,对简单类型使用一个方法。无论哪种方式,他们都必须知道会发生什么,但如果有一种顺利的方式来完成我的要求,我宁愿保持API的简单

注意:这是缺少协方差的一个解决方案,因为即使在包含的类型上定义了隐式转换运算符,将列表转换为T也会失败。所以,为了遵循b.Cast的解决方案列表,我需要知道如何转换A

谢谢

您可以从typeofT开始获取代表T的System.Type实例。 一旦有了它,就可以检查Type.IsGenericType以查看它是否真的是泛型,然后调用Type.GetGenericArguments以查看使用了哪些泛型参数

例如,如果T为List,IsGenericType将为true,GetGenericArguments将返回一个包含一个元素的数组:System.Int32

例如,下面是我编写的一段代码,以查看给定类型的变量类型是否是IEnumerable(其中T未知)的实现。它首先必须查看它是否为泛型,然后确定它是否只有一个参数,确定所述参数,并查看它是否实现了接口,给定该参数:

public T getValueByName<T>(String name)
{
    if( T is List )
        Object containedType = T.WhatGoesHere()?
...
有关参考,请参阅:

您可以从typeofT开始获取代表T的System.Type实例。 一旦有了它,就可以检查Type.IsGenericType以查看它是否真的是泛型,然后调用Type.GetGenericArguments以查看使用了哪些泛型参数

例如,如果T为List,IsGenericType将为true,GetGenericArguments将返回一个包含一个元素的数组:System.Int32

例如,下面是我编写的一段代码,以查看给定类型的变量类型是否是IEnumerable(其中T未知)的实现。它首先必须查看它是否为泛型,然后确定它是否只有一个参数,确定所述参数,并查看它是否实现了接口,给定该参数:

public T getValueByName<T>(String name)
{
    if( T is List )
        Object containedType = T.WhatGoesHere()?
...
有关参考,请参阅:


您可以使用typeofT,然后使用反射来获取泛型类型参数请看这个问题:我认为它可能重复这是您的问题:我需要知道是否可以将列表转换为传入的任何类型的列表?如果是这样的话,那么您的意思是什么,因为泛型允许您将任何类型的对象捕获到方法中。你能提供更多的信息和一个完整的代码示例来说明你在寻找什么吗?你可以使用typeofT,然后使用反射来获取泛型类型参数。请看这个问题:我认为它可能重复。这是你的问题:我需要知道我是否能将列表转换为传入的任何类型的列表?如果是这样的话,那么您的意思是什么,因为泛型允许您将任何类型的对象捕获到方法中。你能提供更多的信息和一个完整的代码示例来说明你在寻找什么吗?这是我在这个网站上见过的最好的答案之一。非常感谢!这是我在这个网站上看到的最好的答案之一。非常感谢!