我在方法中使用了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的自定义方法?
答案 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);
}