我可以使用通用键作为键吗?

时间:2014-07-19 08:07:02

标签: c# generics

我可以创建一个字典,其中键的类型是通用的吗?

e.g。

void addKey<T>( object value )
{
    dic.add( T, value );
}

2 个答案:

答案 0 :(得分:3)

怎么样?

void AddKey<T>(T value)
{
    dic.Add(typeof(T), value );
}

用法:

// the type of value is automatically detected based on usage
AddKey("sampleString"); 

你当然可以传递类型:

AddKey<BaseClass>(derriveredInstance);

然后,字典的类型为Dictionary<Type, object>

缺点: 您不能将其他(不是基础或不相同)类的实例作为键传递:

AddKey<int>("some string"); // compile time error

如果你想达到这样的目的,你应该看看其他答案并传递Type或传递object作为价值类型。

答案 1 :(得分:1)

总结一下评论:

Dictionary<Type, object> dic = new Dictionary<Type, object>();

void AddKey(Type key,object value)
{
    dic.Add(key, value);
}

你可以像这样使用它:

AddKey(typeof(string), new Object());