Отражение, получить пару ключ-значение общего словаря - PullRequest
0 голосов
/ 06 октября 2018

Как я могу получить ключ для определенного значения MyData.Name?Мне не нужно изменять словарь

Это заданная ситуация, и мне нужно сопоставить «Сервер» с 1L

public class MyBase
{
    protected struct MyData
    {
        public string Name;
    }
}

public class MyClass : MyBase
{
    private readonly Dictionary<ulong, MyBase.MyData> m_Data = new Dictionary<ulong, MyBase.MyData>();
    public MyClass()
    {
        m_Data.Add(1L, new MyData { Name = "Server" });
    }
}

public class MyMulti
{
    public static MyClass myClass = new MyClass();
}

public class Test
{

    Type MyDataType = typeof(MyBase).GetNestedType("MyData", BindingFlags.Instance | BindingFlags.NonPublic);
    object m_Data = typeof(MyClass).GetField("m_Data", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(MyMulti.myClass);

    // How can i get the Key for a specific MyData.Name value?
}

1 Ответ

0 голосов
/ 06 октября 2018

Я действительно нашел простой способ сделать это:

var m_Data = typeof(MyClass).GetField("m_Data", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(MyMulti.myClass) as IDictionary;


foreach (var pair in m_Data.Keys)
{
  Console.WriteLine(pair + " = " + m_Data[pair].GetType().GetField("Name").GetValue(m_Data[pair]));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...