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

时间:2015-08-06 21:49:19

标签: c# generics delegates overloading

我在方法中使用了delegate参数。我想提供一个匹配委托签名的重载方法。该课程如下:

    /lab/blog/wp-content/
    1-list.txt
    2014/
    2015/
    rbxslider/
    slideshow-gallery/
    uigen_2015/

然后我尝试使用它:

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

有没有办法指定正确的方法而不编写简单调用DateTime.Parse的自定义方法?

1 个答案:

答案 0 :(得分:1)

我认为你的第一个例子几乎是正确的。很难分辨,因为有一些代码丢失,但我认为问题是编译器无法判断record.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);
    }