0

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

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

有什么方法可以通用地使用它,还是我必须检查每种值类型的条件。

4

2 回答 2

1

你可以使用这个:

Type t = value.GetType().GetGenericTypeDefinition();

if (t == typeof(KeyValuePair<,>))
{

}

建议:您应该首先检查它是否为t.IsGenericType(查看 Jon 的帖子)并检查该值是否已分配

于 2013-10-04T09:38:42.700 回答
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
        }
    }
}
于 2013-10-04T09:38:46.173 回答