为接受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的自定义方法?

为接受Func作为参数的方法提供一个特定的重载方法

我认为你的第一个例子几乎是正确的。这很难判断,因为有一些缺失的代码,但我认为问题是编译器不能告诉记录。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);
    }