方案: 我有一个实用工具方法来对keyvaluepair的键执行操作。键将始终为int,但值可以是任何类型的对象。我不需要知道该值是什么类型的对象。 当我尝试执行操作时假设所有对象都是对象的子类型,它不起作用。
object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is KeyValuePair<int, object >) //this check doesn't return true
{
}
}
有没有办法使用它进行概括,或者我必须检查每种值类型的条件。
答案 0 :(得分:1)
您可以使用:
Type t = value.GetType().GetGenericTypeDefinition();
if (t == typeof(KeyValuePair<,>))
{
}
提醒:
您应首先检查它是t.IsGenericType
(查看Jon的帖子)并检查值是否已分配
答案 1 :(得分:1)
不可能概括这一点。你手边有一个object
,使用它的唯一方法是将它强制转换为确切的类型,包括类型参数。
“其他”选项是使用反射,但这会有很大不同。例如:
var t = value.GetType();
if (t.IsGenericType) {
if (t.GetGenericTypeDefinition() == typeof(KeyValuePair<,>)) {
// OK, it's some type of KVP
var args = t.GetGenericArguments();
if (args[0] == typeof(int)) {
// The Key type is int
}
}
}