У меня есть общий метод, как это (упрощенный вариант):Частичный вывод типа
public static TResult PartialInference<T, TResult>(Func<T, TResult> action, object param)
{
return action((T)param);
}
В приведенном выше описании, param
имеет тип object
по назначению. Это часть требования.
Когда я заполняю типов, я могу назвать это так:
var test1 = PartialInference<string, bool>(
p => p.EndsWith("!"), "Hello world!"
);
Однако, я хотел бы использовать вывод типа. Предпочтительно, я хотел бы написать следующее:
var test2 = PartialInference<string>(
p => p.EndsWith("!"), "Hello world!"
);
Но это не скомпилировано. Лучшее, что я придумал это:
var test3 = PartialInference(
(string p) => p.EndsWith("!"), "Hello world!"
);
Поэтому я хотел бы иметь это в качестве параметра типа и до сих пор есть правильно набран возвращаемый тип, потому что мои реальные вызовы выглядят примерно так:
var list1 = ComponentProvider.Perform(
(ITruckSchedule_StaffRepository p) => p.GetAllForTruckSchedule(this)
)
что очень некрасиво, и я хотел бы написать, как-то вроде этого:
var list2 = ComponentProvider.Perform<ITruckSchedule_StaffRepository>(
p => p.GetAllForTruckSchedule(this)
)
Вывод типа .NET - это все или ничего - никогда не частичный. – Dario
Любые идеи для перезаписи метода, которые все равно избавятся от уродливого набора параметра 'p'? –
@ Dario - это чрезмерное обобщение. Вывод типа - это функция C#, а другие языки .net могут обрабатывать ее по-разному. – CodesInChaos