我在学校有一个项目,我的老师要求我们将委托(delegate)添加到函数列表中。我下面的代码在 AddDel 方法中存在问题。智能感知告诉我它无法从 Delegate 转换为 Func,但我的老师坚持认为它完全应该毫无问题地做到这一点。我究竟做错了什么?
public class TestDelegate
{
private delegate string MyDel(int iVal, double dVal, char cVal, string sVal);
private List<Func<int, double, char, string, string>> _DList;
public TestDelegate() { }
public void AddDel()
{
//Creating a delegate
MyDel myDel = new MyDel(MyFunction);
_DList.Add(myDel); //Adding it to the TestDelegate
}
public void RunTests()
{
int idata = 1;
double ddata = 5.1;
char cdata = 'A';
string sdata = "Method";
foreach (Func<int, double, char, string, string> myDel in _DList)
WriteLine(myDel(idata, ddata++, cdata++, sdata + idata++));
}
private static string MyFunction(int iVal, double dVal, char cVal, string sVal)
{
return $"{sVal}:\t{iVal} {dVal}{cVal}";
}
}
最佳答案
基本上,您根本不应该在这里声明自己的委托(delegate)。像这样的委托(delegate)类型之间没有转换。
您想要 Func<int, double, char, string, string>
,因此声明一个:
Func<int, double, char, string, string> func = MyFunction;
_DList.Add(func);
或者更简单,只需调用 Add:
_DList.Add(MyFunction);
如果您确实想保留当前代码,可以创建 Func<...>
包裹你的委托(delegate):
MyDel myDel = new MyDel(MyFunction);
var func = new Func<int, double, char, string, string>(myDel);
_DList.Add(func); //Adding it to the TestDelegate
...但我实际上并没有从中看到任何好处。
关于c# - 从委托(delegate)转换为函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37889913/