Когда я запускаю эту программу я получаю две ошибки в строке, содержащей п (3,4)C# Func <> преобразование делегата аргумент ошибки
Аргумент 1: не удается преобразовать из «Int» в T
Аргумент 2: невозможно преобразовать из 'int' в T
Я думал, что тип T будет int, как указано лямбдой. Но если это так, то почему ошибки преобразования? Я что-то не понимаю?
class Program
{
static void DoStuff<T>(Func<T, T, T> fn)
{
Console.WriteLine(fn(3, 4));
}
static void Main()
{
DoStuff((int x, int y) => x + y);
}
}
Это работает, если изменить параметры, чтобы принять Интс в качестве аргументов:
class Program
{
static void DoStuff<T>(T x, T y, Func<T, T, T> fn)
{
Console.WriteLine(fn(x, y));
}
static void Main()
{
DoStuff(3, 4, (int x, int y) => x + y);
}
}
Я родом из C++ фона, таким образом пытаясь получить мою голову вокруг того, что работает, а что нет в C#
Это недопустимо, потому что для чего-то вроде 'DoStuff' оно недействительно.Дженерики не работают, как шаблоны C++, если это то, о чем вы думали. –
hvd