为接受Func作为参数的方法提供一个特定的重载方法
本文关键字:方法 一个 重载 Func 参数 | 更新日期: 2023-09-27 18:06:49
我在方法中使用委托参数。我想提供一个与委托签名匹配的重载方法。该类看起来像这样:
public class Test<DataType> : IDisposable
{
private readonly Func<string, DataType> ParseMethod;
public Test(Func<string, DataType> parseMethod)
{
ParseMethod = parseMethod;
}
public DataType GetDataValue(int recordId)
{
// get the record
return ParseMethod(record.value);
}
}
然后我试着使用它:
using (var broker = new Test<DateTime>(DateTime.Parse))
{
var data = Test.GetDataValue(1);
// Do work on data.
}
现在DateTime.Parse
有一个与Func
匹配的签名;然而,由于它是重载的,编译器无法解析使用哪个方法;在后面的站点看起来很明显!
I then try:
using (var broker = new Test<DateTime>((value => DateTime.Parse(value))))
{
var data = Test.GetDataValue(1);
// Do work on data.
}
是否有一种方法可以指定正确的方法,而不需要编写一个简单地调用DateTime.Parse的自定义方法?
我认为你的第一个例子几乎是正确的。这很难判断,因为有一些缺失的代码,但我认为问题是编译器不能告诉记录。Value是一个字符串,也许是一个对象?如果是这样,将其转换为GetDataValue内部的字符串应该会让编译器满意。
下面是我尝试过的类似示例,编译和运行都很好: class Test<X>
{
private readonly Func<string, X> ParseMethod;
public Test(Func<string, X> parseMethod)
{
this.ParseMethod = parseMethod;
}
public X GetDataValue(int id)
{
string idstring = "3-mar-2010";
return this.ParseMethod(idstring);
}
}
[TestMethod]
public void TestParse()
{
var parser = new Test<DateTime>(DateTime.Parse);
DateTime dt = parser.GetDataValue(1);
Assert.AreEqual(new DateTime(day: 3, month: 3, year: 2010), dt);
}