C # Объединить методы, передав тип поля? - PullRequest
2 голосов
/ 20 января 2010

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

Допустим, у меня есть класс Customer с полями ID, firstName и lastName. Теперь скажите, что у меня есть список клиентов, и я хочу написать один метод, который будет записывать в консоль ID, firstName или lastName в зависимости от того, какой из них я укажу.

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

Я знаю, что читал о том, как сделать это в C # за последние несколько дней, но мой мозг перегружен, и он ускользает из моего сознания ...

Любая помощь будет оценена.

Ответы [ 3 ]

10 голосов
/ 20 января 2010
public void PrintCustomer<T>(Customer c, Func<Customer, T> func)
{
   Console.WriteLine("{0} , {1}", c.ID, func(c));
}

Использование:

PrintCustomer(myCustomer, c => c.FirstName);

OR

PrintCustomer(myCustomer, c => c.LastName);
0 голосов
/ 20 января 2010

Это действительно просто комментарий к ответу BFree, но я хотел, чтобы подсветка синтаксиса ...

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

public static void PrintCustomer(Customer c, Func<Customer, string> func)
{
    Console.WriteLine("{0} , {1}", c.ID, func(c));
}
0 голосов
/ 20 января 2010

Использовать Enum в качестве аргумента? Каждое значение перечисления является отдельным целевым полем ...

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