我有以下代码:
delegate string CD();
void MyFunction()
{
stringBuilder.Append((CD)delegate()
{
switch(whatever)
{
case 1 : return "A";
...
default: return "X";
}
});
}
但是stringBuilder
会附加文字MyNamespace.MyClass+CD
而不是A
或X
。为什么会这样?
答案 0 :(得分:10)
因为StringBuilder.Append在您提供的参数上调用ToString。至于这是一个委托为CD的委托,它返回它的类型。
要返回值A或X,必须调用委托。但Append不期望委托,因此它不会调用它。
答案 1 :(得分:9)
您在CD
的调用中声明了Append
类型的委托,并在其上调用ToString()
,默认情况下返回类型名称,即“MyNamespace.MyClass + CD”。
您需要调用委托才能对其进行评估,例如:
void MyFunction()
{
stringBuilder.Append(((CD)delegate
{
switch (whatever)
{
case 1:
return "A";
...
default:
return "X";
}
}).Invoke());
}