Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用反射向字典添加值_C#_Reflection - Fatal编程技术网

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"