gpt4 book ai didi

c# - 在 C# 中测试对象是否为字典

转载 作者:可可西里 更新时间:2023-11-01 07:43:27 26 4
gpt4 key购买 nike

有没有办法测试一个对象是否是一个字典?

在一个方法中,我试图从列表框中的选定项目中获取值。在某些情况下,列表框可​​能绑定(bind)到字典,但这在编译时是未知的。

我想做类似的事情:

if (listBox.ItemsSource is Dictionary<??>)
{
KeyValuePair<??> pair = (KeyValuePair<??>)listBox.SelectedItem;
object value = pair.Value;
}

有没有办法在运行时使用反射动态地做到这一点?我知道可以对泛型类型使用反射并确定键/值参数,但我不确定在检索到这些值后是否有办法完成剩下的工作。

最佳答案

检查它是否实现了 IDictionary。

请参阅 System.Collections.IDictionary 的定义以查看它为您提供的内容。

if (listBox.ItemsSource is IDictionary)
{
DictionaryEntry pair = (DictionaryEntry)listBox.SelectedItem;
object value = pair.Value;
}

编辑:当我意识到 KeyValuePair 不可转换为 DictionaryEntry 时的替代方案

if (listBox.DataSource is IDictionary)
{
listBox.ValueMember = "Value";
object value = listBox.SelectedValue;
listBox.ValueMember = ""; //If you need it to generally be empty.
}

此解决方案使用反射,但在这种情况下,您不必执行繁重的工作,ListBox 会为您完成。此外,如果您通常将字典作为数据源,则可以避免一直重置 ValueMember。

关于c# - 在 C# 中测试对象是否为字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/123181/

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