为什么我不能在调试器中使用新字符串?

时间:2010-12-10 22:39:05

标签: c# visual-studio debugging

以下代码成功编译:

string foo = new string(new char[] { 'b', 'a', 'r' });

如果粘贴到观察窗口或立即窗口中,则无法评估以下代码:

new string(new char[] { 'b', 'a', 'r' });

错误消息是:

'new string(new char[] { 'b', 'a', 'r' })' threw an exception of type 'System.ArgumentException'
    base {System.SystemException}: {"Only NewString function evaluation can create a new string."}
    Message: "Only NewString function evaluation can create a new string."
    ParamName: null

为什么会这样?

1 个答案:

答案 0 :(得分:23)

C#表达式评估程序使用ICorDebugEval& ICorDebugEval2接口在调试会话期间与CLR交互。该接口不允许在string类型上调用任何构造函数。相反,它强制所有调用创建string的新实例以通过ICorDebugEval::NewString方法。 C#EE在EE中不是特殊情况string,因此它尝试直接调用构造函数并失败。

请注意,在Visual Studio 2010中,您不会在VB.Net中看到此异常。它将通过评估参数并将生成的string对象转发到{{string来对ICorDebugEval::NewString构造函数进行特殊情况调用。 1}}