Как получить доступ к члену в фигурных скобках {ID: 1, Имя: Джон} - PullRequest
0 голосов
/ 16 ноября 2018

Я получил переменную "StudentInfo", для которой в фигурной скобке указано значение ниже:

var StudentId = StudentBll.GetStudents(false).Select(t => new { ID = t.ID, Name = t.Name }).ToList();


            comboStudent.DataSource = StudentId;
            comboStudent.DisplayMember = "Name";
            comboStudent.ValueMember = "ID";

var StudentInfo = comboStudent.SelectedItem;

Значение var StudentInfo возвращается как:

{ ID: 1, Name: "John" }
    ID: 1
    Name: "John"

Как я могу ссылаться на Имя только из StudentInfo? Например, lblName.Text = StudentInfo.Name ? lblName.Text = StudentInfo(0).Name ? Оба не работают ...

1 Ответ

0 голосов
/ 16 ноября 2018

Свойство ComboBox SelectedItem возвращает object. Только во время выполнения мы знаем, какое значение это имеет. Вот почему вы не можете использовать StudentInfo.Name, потому что с точки зрения компилятора вы делаете что-то вроде var StudentInfo = new object(); Console.WriteLine(StudentInfo.Name);: object не содержит свойства Name.

Ваша следующая проблема заключается в том, что вы используете анонимный тип (new { ID = t.ID, Name = t.Name }), поэтому вы не можете просто привести SelectedItem обратно к типу.

Некоторые опции:

1. Определить класс

public class BasicStudent
{
    public int ID {get;set;}
    public string Name {get;set;}
}

измените ваш выбор на .Select(t => new BasicStudent { ID = t.ID, Name = t.Name }) и затем произнесите .SelectedItem: Console.WriteLine(((BasicStudent)comboStudent.SelectedItem));

2. Используйте оригинальный класс

Прекратите выбирать анонимный тип и просто используйте объект как есть. Затем просто откиньте от .SelectedItem: Console.WriteLine(((Student)comboStudent.SelectedItem));

3. Используйте динамический

dynamic student = comboStudent.SelectedItem;
Console.WriteLine(student.Name.ToString());

4. Используйте хакерский трюк, чтобы привести comboStudent.SelectedItem обратно к анонимному типу

См. Ответ здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...