C# 使用反射向字典添加值
我有一节课C# 使用反射向字典添加值,c#,reflection,C#,Reflection,我有一节课 class a { private Dictionary <int , string> m_Dict = new Dictionary<int , string>(); } a类 { 专用词典m_Dict=新词典(); } 从其他组件/类中,需要使用反射向m_Dict字典添加值!我该怎么做?我搜索并尝试了一下,但没有成功。字典很痛苦,因为它没有实现IList(前几天晚上我还在抱怨这件事)。这实际上取决于你拥有什么。解析int/string的
class a
{
private Dictionary <int , string> m_Dict = new Dictionary<int , string>();
}
a类
{
专用词典m_Dict=新词典();
}
从其他组件/类中,需要使用反射向m_Dict字典添加值!我该怎么做?我搜索并尝试了一下,但没有成功。字典很痛苦,因为它没有实现IList(前几天晚上我还在抱怨这件事)。这实际上取决于你拥有什么。解析
int
/string
的Add
方法非常简单,但是如果您处理的是典型的列表反射,则需要ICollection
中的Add
方法
对于标准用法:
object data = new Dictionary<int, string>();
object key = 123;
object value = "abc";
var add = data.GetType().GetMethod("Add", new[] {
key.GetType(), value.GetType() });
add.Invoke(data, new object[] { key, value });
对象数据=新字典();
对象键=123;
对象值=“abc”;
var add=data.GetType().GetMethod(“添加”,新[]{
key.GetType(),value.GetType()});
调用(数据,新对象[]{key,value});
我假设您想访问私有成员“mu Dict”
但这是非常糟糕的设计反射?给一个人一把锤子,一切看起来都像钉子!。。。同意,但试着围绕EWS托管API进行一些单元测试,但不这样做。我发现,将Firebase数据库Unity SDK中的不明确Dict对序列化到Dict中时,这很有用(以击败大多数内存攻击)。由于您的评论,我仍然有点担心这是一个糟糕的设计。我应该发布一个问题吗?我觉得随着firebase移动应用程序的激增,通过反射和类型转换进行自定义对象序列化是一个必要的缺点。
a x = new a();
Dictionary dic = (Dictionary) x.GetType()
.GetField("m_Dict",BindingFlags.NonPublic|BindingFlags.Instance)
.GetValue(x);
// do something with "dic"