gpt4 book ai didi

c# - 将作为泛型类型参数出现的运行时 Dictionary 转换为其正确的编译时类型

转载 作者:行者123 更新时间:2023-11-30 19:41:06 26 4
gpt4 key购买 nike

考虑一下:

public void ReadEachItemInTheDictionary<V>(V value)
{
// I know that value is a dictionary
// where the key and value are scalars
// or primitive types or value types
if (value.GetType().IsGenericType &&
value.GetType().GetGenericTypeDefinition() ==
typeof(Dictionary<,>))
{
// I know the System.Type of each type
// argument of the dictionary

var keyType = value.GetType().GetGenericArguments()[0];

var valueType = value.GetType().GetGenericArguments()[1];

// Now, I want to do something like this:
foreach(var keyValuePair in value)
{
// However, since at compile-time, there
// is no guarantee for the compiler that
// value is indeed an IEnumerable<KeyValuePair<,>>
// that code won't work, obviously.

// I want to basically get a handle on the
// data


// I feel horrible. I should know this. And
// there was a time I did. Just feeling ashamed now.
}
}
}

更新

看着我收到的两个答案,我不得不再次强调我的问题:

我只有字典的keyvalue的类型参数名。哦,我突然得到了答案。等等,我正在发布。

再次更新

不,等等。我在做什么?仍未解决。

最佳答案

这听起来像是在滥用泛型,但无论如何:

将 foreach 循环放入一个单独的方法中,该方法具有适当的泛型类型参数(可能与字典中的参数相同)。

static void Read<TKey, TValue(Dictionary<TKey, TValue> dict) {
foreach(var keyValuePair in dict) { }
}

在该方法中,您可以像往常一样使用该词典。

使用反射 (MakeGenericMethod) 或像这样调用该方法:

Read((dynamic)value);

你不能让所有的字典处理代码都是静态类型的。只有调用必须是动态的。

关于c# - 将作为泛型类型参数出现的运行时 Dictionary<K, V> 转换为其正确的编译时类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21090751/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com