我有一个带有此签名的函数:
public static async Task LoadAsync<T>(T model, Func<T, PropertyInfo, Task> comparer, params string[] includes) where T: class
我这样调用:
await EagerLoader.LoadAsync(model, SetPropertyValue, includes);
SetPropertyValue 是我传递给 LoadAsync 的函数。它的签名是这样的:
private async Task SetPropertyValue(Account model, PropertyInfo property)
我想做的是将签名更改为:
private async Task SetPropertyValue(Account model, PropertyInfo property, params string[] includes)
如何在 LoadAsync 签名中表示该内容?
答案 0 :(得分:1)
params
限定符不属于该类型。在运行时,它的存在表示为方法参数定义的属性[ParamArray]
。
如果您将类型更改为
Func<T, PropertyInfo, string[], Task>
你可以通过两个
Task SetPropertyValue(Account model, PropertyInfo property, params string[] includes)
和
Task SetPropertyValue(Account model, PropertyInfo property, string[] includes)
(即有和没有params
)。由于params
不属于参数类型,因此string[]
通用代理的类型参数中params
不能归类为Func
。
这应该在您的用例中正常工作,因为您的LoadAsync
不需要使用变量参数语法调用comparer
委托,即LoadAsync
将传递整个数组,而不是编译器必须组合成数组的string
s的可变长度列表。