kar*_*rel 6 c# lambda stringbuilder delegates
我有以下代码:
delegate string CD();
void MyFunction()
{
stringBuilder.Append((CD)delegate()
{
switch(whatever)
{
case 1 : return "A";
...
default: return "X";
}
});
}
Run Code Online (Sandbox Code Playgroud)
但是stringBuilder附加文本MyNamespace.MyClass+CD而不是A或X.为什么会这样?
PVi*_*itt 10
因为StringBuilder.Append对您提供的参数调用ToString.至于这是一个委托为CD的委托,它返回它的类型.
要返回值A或X,必须调用委托.但Append不期望委托,因此它不会调用它.
您已CD在调用中声明了一个类型的委托,Append并ToString()在其上调用它,默认情况下返回类型名称,即"MyNamespace.MyClass + CD".
您需要调用委托来进行评估,例如:
void MyFunction()
{
stringBuilder.Append(((CD)delegate
{
switch (whatever)
{
case 1:
return "A";
...
default:
return "X";
}
}).Invoke());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
221 次 |
| 最近记录: |