如何处理所有类型的值的检查键值对

本文关键字:类型 检查 键值对 何处理 处理 | 更新日期: 2023-09-27 18:33:48

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

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

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

如何处理所有类型的值的检查键值对

不可能

一概而论。您手头有一个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
        }
    }
}

你可以使用这个:

Type t = value.GetType().GetGenericTypeDefinition();
if (t == typeof(KeyValuePair<,>))
{
}

建议:你应该首先检查它是否是一个t.IsGenericType(看看乔恩的帖子)并检查值是否被分配