部分types推断

我有这样一个通用的方法(简化版本):

public static TResult PartialInference<T, TResult>(Func<T, TResult> action, object param) { return action((T)param); } 

在上面, param是有param的typesobject 这是要求的一部分。

当我填写types时,我可以这样称呼它:

 var test1 = PartialInference<string, bool>( p => p.EndsWith("!"), "Hello world!" ); 

但是,我想使用types推断。 最好我想写这个:

 var test2 = PartialInference<string>( p => p.EndsWith("!"), "Hello world!" ); 

但是这不能编译。 我想到的最好的是这样的:

 var test3 = PartialInference( (string p) => p.EndsWith("!"), "Hello world!" ); 

我想这个作为一个types参数,仍然有正确的types返回types的原因是因为我的实际调用看起来像这样:

 var list1 = ComponentProvider.Perform( (ITruckSchedule_StaffRepository p) => p.GetAllForTruckSchedule(this) ) 

这是非常丑陋的,我很想写这样的东西:

 var list2 = ComponentProvider.Perform<ITruckSchedule_StaffRepository>( p => p.GetAllForTruckSchedule(this) ) 

您可以将t分割为genericstypes的generics方法:

 class Foo<TOuter> { public static void Bar<TInner>(TInner arg) {...} } ... int x = 1; Foo<string>.Bar(x); 

这里的int是推断的,但string是显式的。

你试图达到的是不可能的。 如果推论是可能的,你需要指定generics参数或者不指定它们。