Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# для начинающих

Войти
Регистрация
Восстановить пароль
 
NameGrey2
3 / 3 / 1
Регистрация: 01.12.2012
Сообщений: 26
#1

Изменение типа параметров в объявлении делегата Func - C#

30.07.2013, 23:13. Просмотров 629. Ответов 1
Метки нет (Все метки)

У меня есть метод, который сортирует присылаемый список по определенному параметру.
К примеру, есть тип
C#
1
2
3
4
5
6
7
public class Student
    {
        public string Name { get; set; }
        public string TestName { get; set; }
        public byte Grade { get; set; }
        public DateTime TestDate { get; set; }
}
Если я хочу отсортировать список записей типа Student по имени, то в коде вызываю свой метод:

C#
1
IEnumerable<Student> newList = sortBy(list,"Name", true);
Вот сам метод:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
IEnumerable<Student> _sortBy(List<Student> list, string sortedField,bool desc)
        {
            Type studentType = typeof(Student);
            MemberInfo studentNameProperty = studentType.GetProperty(sortedField);          
            ParameterExpression param = Expression.Parameter(typeof(Student), "result");
            MemberExpression member = Expression.MakeMemberAccess(param, studentNameProperty);          
            Expression<Func<Student, string>> lambda = Expression<Func<Student,
                string>>.Lambda<Func<Student, string>>(member, param);
            if (desc)
            {
                return list.OrderByDescending(lambda.Compile()); 
            }
            else
            {
                return list.OrderBy(lambda.Compile()); 
            }           
        }
А теперь проблема: если попытаться вызвать сортировку по Оценке(Grade), то наш делегат Func<Student, string> не подойдет. Нам потребуется Func<Student, byte>.
А теперь, собственно, вопрос: Как лучше всего сделать так, чтобы было возможным подставлять делегат с нужным типом?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.07.2013, 23:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Изменение типа параметров в объявлении делегата Func (C#):

аналог делегата Func<T> без возвращаемого значения - C#
есть ли такой делегат в стандартной библиотеке классов? или может быть есть способ указать в параметре типе void ?

Сохранение делегата и параметров - C#
Добрый день. Помогите написать тело сохранения {названия функции;сериализация параметров} вот такого вызова: public void...

Не получается создать переменную типа Func<int, void> - C#
не получается создать переменную типа Func&lt;int, void&gt; упорно пишет &quot;Использование ключевого слова void в этом контексте недопустимо&quot;, но...

Объекту типа делегата не присваивается адрес функции - C#
почему объекту типа делегата: string del(object obj); не присваивается адрес функции string f(double)? Object ведь любой тип схавать...

Динамическая правка входного типа делегата в Expression - C#
Есть вот такой костыль от которого не уйти public static int Delete&lt;T,U&gt;(DbSet&lt;T&gt; f, Expression&lt;Func&lt;U,bool&gt;&gt; e) where T :...

.NET 4.x Разница лямбда выражения, делегата (\анонимного делегата), методом (\анонимных методов) - C#
Всё просто: В чём отличия: лямбд, делегатов, анонимных делегатов, методов, анонимных методов? У меня в проге сучилась такая...

1
kolorotur
Эксперт .NET
9205 / 7718 / 1235
Регистрация: 17.09.2011
Сообщений: 13,293
31.07.2013, 10:52 #2
У списка есть метод Sort, в который можно передать экземпляр IComparer.
Создаете реализации для разных полей и вперед.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2013, 10:52
Привет! Вот еще темы с ответами:

Отличие делегата от делегата с лямбда-выражением - C#
Народ чем отличается Invoke(new Action(() =&gt; button2.IsEnabled = true)); от Invoke(new Action(delegate(){ button2.IsEnabled = true;...

c#. Изменение системных параметров - C#
Здравствуйте. Возникла задача: в ос Win7 программно, в настройках устройства воспроизведения USB Audio установить: &quot;отключить все эффекты.&quot;...

Изменение параметров дисплея. - C#
Помогите найти функцию для изменения яркости и контасности дисплея. Желательно через WINAPI.

Изменение параметров в приложении - C#
Допустим у меня написано приложение с двумя кнопками первая предположим выкидывает сообщение с каким-то числом (допустим 1), а вторая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.