如何在c#中检查特定词典是否为泛型词典类型?

如何在c#中检查特定词典是否为泛型词典类型?,c#,dictionary,C#,Dictionary,通用词典如下: public class ConcurrentDictionary<TKey, TValue> : IDictionary<TKey, TValue> var container = new ConcurrentDictionary<string, Unit>(); var container = new ConcurrentDictionary<string, CustomUnitClass>(); 提前谢谢。您不应该这样做,

通用词典如下:

public class ConcurrentDictionary<TKey, TValue> : IDictionary<TKey, TValue>
var container = new ConcurrentDictionary<string, Unit>();
var container = new ConcurrentDictionary<string, CustomUnitClass>();

提前谢谢。

您不应该这样做,但如果您出于某种原因确实需要它,它是:

if (obj.GetType().GetGenericTypeDefinition() == typeof(Dictionary<,>)) {
    // It is a Dictionary<TKey, TValue>
}
if(obj.GetType().GetGenericTypeDefinition()==typeof(字典)){
//这是一本字典
}

if(obj是ConcurrentDictionary){
//这是一本词典
}

你不应该这样做,但如果你真的因为某种原因需要它,它是:

if (obj.GetType().GetGenericTypeDefinition() == typeof(Dictionary<,>)) {
    // It is a Dictionary<TKey, TValue>
}
if(obj.GetType().GetGenericTypeDefinition()==typeof(字典)){
//这是一本字典
}

if(obj是ConcurrentDictionary){
//这是一本词典
}
公共类ConcurrentDictionary:IDictionary
是“开放泛型类型”,不能有开放泛型类型的实例

但是,如果您想知道给定对象是否是具有泛型类型参数的字典,可以使用反射来确定:

        var d1 = new Dictionary<int, string> ();

        var t = d1.GetType ();

        Console.WriteLine ("Generic? " + t.IsGenericType);
vard1=newdictionary();
var t=d1.GetType();
Console.WriteLine(“Generic?”+t.IsGenericType);
公共类ConcurrentDictionary:IDictionary
是“开放泛型类型”,不能有开放泛型类型的实例

但是,如果您想知道给定对象是否是具有泛型类型参数的字典,可以使用反射来确定:

        var d1 = new Dictionary<int, string> ();

        var t = d1.GetType ();

        Console.WriteLine ("Generic? " + t.IsGenericType);
vard1=newdictionary();
var t=d1.GetType();
Console.WriteLine(“Generic?”+t.IsGenericType);

您也可以将词典视为非通用的
i词典。当然,在这种情况下,您会丢失所有强输入:

var dictionary = obj as IDictionary;
if (dictionary != null)
{
    ICollection keys = dictionary.Keys;    
    ICollection values = dictionary.Values;
    // work with keys and values as a collection of objects
}

您还可以将词典视为非泛型
i词典
。当然,在这种情况下,您会丢失所有强输入:

var dictionary = obj as IDictionary;
if (dictionary != null)
{
    ICollection keys = dictionary.Keys;    
    ICollection values = dictionary.Values;
    // work with keys and values as a collection of objects
}

如何拥有泛型类的实例?这似乎没有什么意义。你怎么能有一个泛型类的实例呢?这似乎没有多大意义。第一个解决方案很好用。第二个问题没有,因为我有许多ConcurrentDictionary对象,它们具有不同的第二个参数。还有一个问题与原始问题相关——我如何转换它?类似于:(obj作为concurrentdirectionary).Keys[i]?您可能应该为此使用非泛型IDictionary接口。但我郑重建议您重新考虑您的设计,最后一点是——如何将对象d转换为通用ConcurrentDictionary:ConcurrentDictionary unit=d作为ConcurrentDictionary;我不想按如下方式使用特定强制转换:ConcurrentDictionary单元=d作为ConcurrentDictionary;第一个解决方案很好。第二个问题没有,因为我有许多ConcurrentDictionary对象,它们具有不同的第二个参数。还有一个问题与原始问题相关——我如何转换它?类似于:(obj作为concurrentdirectionary).Keys[i]?您可能应该为此使用非泛型IDictionary接口。但我郑重建议您重新考虑您的设计,最后一点是——如何将对象d转换为通用ConcurrentDictionary:ConcurrentDictionary unit=d作为ConcurrentDictionary;我不想按如下方式使用特定强制转换:ConcurrentDictionary单元=d作为ConcurrentDictionary;