以下代码成功编译:
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
为什么会这样?
答案 0 :(得分:23)
C#表达式评估程序使用ICorDebugEval
& ICorDebugEval2
接口在调试会话期间与CLR交互。该接口不允许在string
类型上调用任何构造函数。相反,它强制所有调用创建string
的新实例以通过ICorDebugEval::NewString
方法。 C#EE在EE中不是特殊情况string
,因此它尝试直接调用构造函数并失败。
请注意,在Visual Studio 2010中,您不会在VB.Net中看到此异常。它将通过评估参数并将生成的string
对象转发到{{string
来对ICorDebugEval::NewString
构造函数进行特殊情况调用。 1}}