Member 11859517 Ответов: 2

Как найти свойства из объекта, содержащего другой структурный объект, и добавить их в словарь в C#?


У меня есть класс, который содержит ссылку на одну или несколько структур и в структуре имеет некоторые свойства.
теперь я хочу найти свойства из вложенного объекта(то есть ссылки на структуру), создав объект класса и добавив его в словарь.
кто-нибудь может мне помочь?

спасибо
Динь

Что я уже пробовал:

Словарь

Karthik_Mahalingam

вам нужны свойства struct также в словаре?

Member 11859517

да, собственность только мне нужна в словаре.

BillWoodruff

Пожалуйста, полностью опишите проблему, с которой вы работаете. Вы получаете ответы, которые полезны, но также являются дикими догадками. Доступ к свойствам в экземпляре структуры в экземпляре класса перед компиляцией-это совершенно другая вещь, чем доступ к этим свойствам во время выполнения, который требует рефлексии.

Итак: ваш вопрос о времени выполнения или времени компиляции ?

Member 11859517

MyStruct общественные структуры
{
public int Id { get; set; }
public string Name { get; set; }
}
общественные структуры MyStruct1
{
public int Id1 { get; set; }
общественного строка ФИО1 { получить; набор; }
}


внутренний класс MyClass
{
public MyStruct myStruct;
public MyStruct myStruct1;
}

MyClass m = новый MyClass();
м. myStruct.ID = 123;
м. myStruct.Имя = " xyz";

м. myStruct.Типа id1 = 890;
м. myStruct.Имя1 = "Азбука";

Метод getproperties(м);

GetProperies(объект m)
{}
я хочу, чтобы это было во время выполнения.

Member 11859517

Я хочу использовать отражение.
если m содержит свойство, мы можем легко это выяснить.
но здесь m содержит другой объект. плз есть какое-нибудь решение?

2 Ответов

Рейтинг:
18

Maheshbhushan_Kshirsagar

Допустим, у нас есть структура, определенная ниже;

internal struct MyStruct
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }



Который используется в классе;

internal class MyClass
    {
        public MyStruct myStruct { get; set; }
    }


Извлечение и обновление словаря можно выполнить следующим образом;

MyClass m = new MyClass();
            var required = m.myStruct.Id;

            Dictionary<int, string> dict = new Dictionary<int, string>();
            dict.Add(required, m.myStruct.Name);


Member 11859517

спасибо Кширсагарджи,

Я хочу этого, используя отражение.
bcz мне нужно провести валидацию dosome.
пожалуйста...

Member 11859517

а в классе есть
MyClass
{
public Mystruct mystruct;
}

Рейтинг:
1

RickZeeland

private Dictionary<string, string> dict = new Dictionary<string, string>();
MyClass myClass = new MyClass();

// Get Class properties.
foreach (var prop in myClass.GetType().GetProperties())
{
	var propValue = prop.GetValue(myClass, null).ToString();
	this.dict.Add(prop.Name, propValue);
}

// Get struct properties.
var temp = myClass.myStruct;
foreach (var prop in temp.GetType().GetProperties())
{
    var propValue = prop.GetValue(temp).ToString();
    this.dict.Add(prop.Name, propValue);
}


Member 11859517

благодарим Рик.
он работает только для того, если myClass содержит свойства.
но в моем случае у myClass есть несколько коллектонов,
пример:
MyStruct общественные структуры
{
public int Id { get; set; }
public string Name { get; set; }
}
общественные структуры MyStruct1
{
public int Id1 { get; set; }
общественного строка ФИО1 { получить; набор; }
}


внутренний класс MyClass
{
public MyStruct myStruct;
public MyStruct myStruct1;
}

MyClass m = новый MyClass();
м. myStruct.ID = 123;
м. myStruct.Имя = " xyz";

м. myStruct.Типа id1 = 890;
м. myStruct.Имя1 = "Азбука";

Метод getproperties(м);

GetProperies(объект m)
{
частный словарь

RickZeeland

Это сложно, может быть, проще изменить ваши структуры на классы, различия не так уж велики.

RickZeeland

Смотрите обновленное решение для свойств структуры !

Member 11859517

не имеет значения, класс это или структура. myClass будет содержать только коллекцию.

Member 11859517

здесь var temp = m. myStruct;
давая ошибку.

Member 11859517

и у меня есть 3 структуры.