DebuggerDisplayAttribute - 在评估表达式时如何选择语言?

时间:2009-09-22 05:01:37

标签: c# .net vb.net

http://msdn.microsoft.com/en-us/library/x810d419.aspx

从我们在MSDN上看到的情况来看,它说要小心我们在语言和语言之间的变化。我的问题是:编写这些表达式的支持语言是什么?如果各种语言可以做到,它如何检测正在使用哪种语言?

我已经在CLI中创建了我的类,并在c#中编写了表达式,因为它可以工作。我在c ++ / CLI中尝试过,但事实并非如此。

这是我的代码:

[DebuggerDisplay("z = {ToString()} Norm = {System.Math.Round(Norm,2)} Angle = {System.Math.Round(Angle, 2)}")]

现在,尝试使用c ++ / CLI方式:

[DebuggerDisplay("z = {ToString()} Norm = {System::Math::Round(Norm,2)} Angle = {System::Math::Round(Angle, 2)}")]

我的假设是它总是将表达式读作c#代码。这是真的吗?

2 个答案:

答案 0 :(得分:4)

我发现了link

  

这种力量有一个缺点   虽然 - 因为评价   DebuggerDisplayAttribute格式字符串   是编译器特定的,第一个   例子将大多数其他工作   调试器如VB,但第二个   由于其使用,我们不会评估   C#特有的三元运算符。   这取决于调试器   使它显示默认值   类名的值或错误   指示语法的哪一部分   无法评估;这可能是   如果你在一个工作,这很重要   多语言环境,或者如果你   将您的类作为库发送到   客户。

答案 1 :(得分:3)

我的解释是,它总会以发生的格式解释它,看起来很像C#,是的。所以.用于成员访问等(与数据绑定相同,使用.进行成员访问,无论调用者的语言如何)。如果您看到关系(string.Format等),它也很像"{0} - {1}"模式。

当然,如果表达式复杂,你可以考虑debugger type proxy