如何处理检查所有TYPE值的keyvaluepair

时间:2013-10-04 09:29:47

标签: c# generics

方案: 我有一个实用工具方法来对keyvaluepair的键执行操作。键将始终为int,但值可以是任何类型的对象。我不需要知道该值是什么类型的对象。 当我尝试执行操作时假设所有对象都是对象的子类型,它不起作用。

object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value is KeyValuePair<int, object >) //this check doesn't return true
            {
            }
        }

有没有办法使用它进行概括,或者我必须检查每种值类型的条件。

2 个答案:

答案 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
        }
    }
}