Generi c метод для печати универсального c массива с лямбда-выражением - PullRequest
0 голосов
/ 28 января 2020
public static void PrintArray<T> (T[] array)
   => Array.ForEach(array, Console.WriteLine);

Этот код не работает, потому что Console.Writeline не перегружен для параметра T или я неправильно его понимаю?

Ответы [ 2 ]

2 голосов
/ 28 января 2020

T слишком обобщенно c в этом случае, поэтому Console.WriteLine не знает, как с этим справиться, поскольку выбранная перегрузка Console.WriteLine зависит от типа T.

T : class будет использовать перегрузку, отличную от T : struct.

В этом случае есть несколько хитростей:

  1. Будьте более явными:
private void Print<T>(T[] arr) =>
    Array.ForEach(arr, x=> Console.WriteLine(x));
Использовать ограничение:
private void Print<T>(T[] arr) where T : class =>
    Array.ForEach(arr, Console.WriteLine);
0 голосов
/ 28 января 2020

Array.ForEach() принимает действие делегата в качестве второго параметра, поэтому, если вы измените его на

public static void PrintArray<T>(T[] array) => Array.ForEach(array, a => Console.WriteLine(a));

, оно должно работать

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