C# 将空委托传递给c中的方法#
我需要了解如何通过将空委托函数作为参数传递来调用方法。具体来说,我需要调用的方法定义为:C# 将空委托传递给c中的方法#,c#,delegates,C#,Delegates,我需要了解如何通过将空委托函数作为参数传递来调用方法。具体来说,我需要调用的方法定义为: private async Task<Tuple<VerifiedResult<IEnumerable<T>>, string >> SendRequest<T>(string url, string message, Func<IDictionary<string, string>, T> resultFunc) wher
private async Task<Tuple<VerifiedResult<IEnumerable<T>>, string >> SendRequest<T>(string url, string message, Func<IDictionary<string, string>, T> resultFunc) where T : new()
{
...
}
无需解释SendRequest方法的作用,但它使用我传递的resultFunc来执行一些额外的逻辑。
但是,在某种情况下,该方法在调用Func之前返回。因此,我需要通过传递一个空函数来调用SendRequest方法
我试过:
await SendRequest(dataSource.Location, soapTemplate, () => { });
但我收到的编译错误是:“无法从用法推断SendRequest方法的类型参数。请尝试明确指定类型参数”。调用SendRequest方法时如何传递空Func?委托类型为:
Func<IDictionary<string, string>, T> resultFunc
当您使用lambda时,它们的参数类型和返回类型将根据您将lambda分配给的对象和返回的对象进行推断。您必须确保您的lambda与相同的签名兼容
tl;dr修改lambda以获取参数并返回一些内容,如
\u=>0
如果要保持类型推断,只需传递x=>default(T)
,例如x=>default(VerifiedResult)
。在上下文中,它看起来是这样的:
var result = await SendRequest
(
dataSource.Location,
soapTemplate,
x => default(SomeSpecificReponseClass<SomeType>)
);
var result=等待发送请求
(
数据源。位置,
soapTemplate,
x=>默认值(SomeSpecificResponseClass)
);
您不是只需要r=>null
?在调用方法的地方,它希望返回一个对象。希望null就足够了,但是如果不编辑它的使用位置,就无法绕过它。听起来应该有两个SendRequest
重载,一个产生结果,另一个不产生结果,并带有要匹配的签名。@TyCobb这会破坏类型推断。@Servy-Ah-yes。然后他去战壕!如果要保持类型推断,只需传递x=>default(T)
,例如x=>default(VerifiedResult)
。
T Foo(IDictionary<string,string> dict);
var result = await SendRequest
(
dataSource.Location,
soapTemplate,
x => default(SomeSpecificReponseClass<SomeType>)
);