Как найти определенное поле из генетического объекта List в wpf - PullRequest
0 голосов
/ 14 октября 2019

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

List<StudentModel1> a = new List<StudentModel1>();
List<StudentModel2> b = new List<StudentModel2>();
List<StudentModel3> c = new List<StudentModel3>();

List<object> obj = a.Cast<object>().ToList();//like this

public bool Duplicate(List<object> obj, string Fieldname, string Name)
{
    if (obj.Any(x => x.Fieldname.Contains(Name))) { return true; } else { return false; }
}/// something like this;

здесь я передаю имя поля , имя строки и объект для поиска дубликатов и возвращаем bool.Howполучить доступ к имени поля в linq. Пожалуйста, помогите, как добиться этого. спасибо.

1 Ответ

0 голосов
/ 14 октября 2019

Если я правильно понимаю ваш вопрос, у вас есть 3 разные версии класса: StudentModel1, StudentModel2 и StudentModel3, и вы хотите иметь возможность сравнивать их списки. Вы приводите их к Object, чтобы вы могли передать любую любую версию этого класса в ваш метод Duplicate.

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

Примите во внимание следующее:

    class StudentModelBase
    {
        public string SomeProperty { get; set; }
    }

    class StudentModel1 : StudentModelBase
    {

    }

    class StudentModel2 : StudentModelBase
    {

    }

    class StudentModel3 : StudentModelBase
    {

    }

Если ваш Duplicate метод должен быть в состоянии обработать любой из «StudentModel»«классы, то это означает, что информация, необходимая для определения наличия дубликатов, должна быть общей для всех трех версий этого класса. Свойства и поля, в которых хранится эта информация, должны быть перемещены в StudentModelBase. Затем, вместо приведения к Object, вы должны привести к StudentModelBase.

Ваш каст становится:

List<StudentModelBase> base = a.Cast<StudentModelBase>().ToList();

А ваш Duplicate метод становится примерно таким:

public bool Duplicate(List<StudentModelBase> obj, string Name)

Обратите внимание, я пропустил Fieldname, потому что, если это реализовано правильно, вам не нужно передавать это как параметр. Вы просто должны иметь доступ к нужным элементам StudentModelBase, как к любой нормальной переменной, поскольку они должны быть одинаковыми для всех версий "StudentModel".

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