如何处理所有类型的值的检查键值对
本文关键字:类型 检查 键值对 何处理 处理 | 更新日期: 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
(看看乔恩的帖子)并检查值是否被分配