.NET 3.x Структура и список полей структуры - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, помогите с задачей: Есть структура:
struct MyStruct
{
       int ID;
       int Teg;
       int Unit;
};
как мне представить структуру как массив полей (для того чтобы вывести в комбобокс и пользователь мог сам выбирать поле структуры и присваивать ей значение)
Я частично решил проблему, чтобы заполнить

ComboBox

нужными данными из структуры сделал такой метод расширения:
public static void SetStructFields<T>(this ComboBox cb) where T : struct
{
    cb.Items.Clear();
 
    DataTable dt = new DataTable();
    dt.Columns.Add("ID");
    dt.Columns.Add("NAME");
 
    var type = typeof(T).GetMembers();
    int i = 0;
    foreach (var str in type)
    {
        dt.Rows.Add(new object[] 
        { 
            str, 
            String.Format("({0:000}) {1}", i, str.Name) 
        });
        i++;
    }
 
    cb.DataSource    = dt;
    cb.DisplayMember = "NAME";
    cb.ValueMember   = "ID";
}
Но появился второй вопрос, как можно теперь применить это в запросе

LINQ

? все данные у меня хранятся в

Dictionary<uint, MyStruct> dict;

Что я имею ввиду: скажем есть такой простенький запрос:
var query = from s in dict.Value where s.Teg == val select s;
как сделать чтобы в запрос вставить переменную из

ComboBox

чтобы было что-то на подобии:
var field = ((ComboBox)sender).SelectedValue;
var query = from s in dict.Value where s[field] == val select s;
Естественно так как я написал - не работает, по сему и прошу помощи.
И возможно ли вообще присвоение переменной в єтом участке кода:
dict.Value where s[B][field][/B]

Решение задачи: «.NET 3.x Структура и список полей структуры»

textual
Листинг программы
var field = ((ComboBox)sender).SelectedValue;
var query = from s in dict.Value where s.GetType().GetField("field").GetValue(s) == val select s;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.818 из 5
Похожие ответы