gpt4 book ai didi

c# - 使用反射获取字典值

转载 作者:太空狗 更新时间:2023-10-29 21:09:24 27 4
gpt4 key购买 nike

我正在尝试访问存储在字符串类型 UnknownClass 的字典中的对象。我有 key ,并且知道值是几个容器类之一。由于该值被传递给采用对象的方法,因此我不需要知道作为值存储的类的类型。我还需要调用 ContainsKey 来确认 key 存在。

我试过以下方法都没有成功:

Dictionary<String, object> list = (Dictionary<String, object>)source.GetType().GetProperty(dictionaryName).GetValue(source, null);
nextSource = list[key];

这给了我一个转换错误,并且:

nextSource = source.GetType().GetMethod("get_Item").Invoke(source, new object[] { key });

这给了我一个空引用异常。

这里有更多的代码,虽然我不太确定它会有多大帮助。

private void SetValue(object source, String path, String value)
{
if (path.Contains('.'))
{
// If this is not the ending Property, continue recursing
int index = path.IndexOf('.');
String property = path.Substring(0, index);

object nextSource;
if(property.Contains("*"))
{
path = path.Substring(index + 1);
index = path.IndexOf('.');
String dictionaryName = path.Substring(0, index);

Dictionary<String, object> list = (Dictionary<String, object>)source.GetType().GetProperty(dictionaryName).GetValue(source, null);
nextSource = list[property.Substring(1)];
//property = property.Substring(1);
//nextSource = source.GetType().GetMethod("Item").Invoke(source, new[] { property });
} ...

被访问的字典在 PersonObject 类中定义如下:

public class PersonObject
{
public String Name { get; set; }
public AddressObject Address { get; set; }
public Dictionary<String, HobbyObject> Hobbies { get; set; }

在此阶段,Path 的值设置为 "*Hiking.Hobbies.Hobby"。基本上,路径字符串允许我导航到子类中的属性,我需要字典来访问同一类列表的属性。

最佳答案

Dictionary<TKey, TValue> Class实现非泛型 IDictionary Interface .所以如果你有一个变量 object包含对 Dictionary<String, HobbyObject> 的引用例如,您可以按如下方式在字典中检索值:

object obj = new Dictionary<String, HobbyObject>
{
{ "Hobby", new HobbyObject() }
};

IDictionary dict = obj as IDictionary;
if (dict != null)
{
object value = dict["Hobby"];
// value is a HobbyObject
}

关于c# - 使用反射获取字典值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17624133/

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