【问题标题】:Is it possible to use conditions in a DebuggerDisplay in VB.NET?是否可以在 VB.NET 的 DebuggerDisplay 中使用条件?
【发布时间】:2017-10-09 09:36:23
【问题描述】:

我再次问here的问题,因为答案不适合VB.NET:

考虑以下类:

[DebuggerDisplay("{GetType().Name,nq}: FileName = {FileName,nq}")]
public class FileWrapper 
{
     public string FileName { get; set; }
     public bool IsTempFile { get; set; }
     public string TempFileName { get; set; } 
} 

我想添加一个基于 IsTempFileName 属性的调试器显示。我想 添加字符串 , TempFileName = {TempFileName,nq} 当实例是 一个临时文件。我将如何实现这一目标?

如何在 VB.NET 中做到这一点?

【问题讨论】:

  • 好的,我已经删除了我的答案,和下面的类似。

标签: .net vb.net debugging debuggerdisplay


【解决方案1】:

如今,VB 有它自己的等效于 C# ?: 运算符,即 If。可以在等价场景下使用:

<DebuggerDisplay("{GetType(FileWrapper).Name,nq}: FileName = {FileName,nq}{If(IsTempFile, "", TempFileName: "" & TempFileName, System.String.Empty),nq}")>
Public Class FileWrapper

    Public Property FileName As String
    Public Property IsTempFile As Boolean
    Public Property TempFileName As String

End Class

似乎GetType 在那里被解释为VB 运算符而不是Object.GetType 方法,因此您还需要在其中添加类型作为参数。

还值得查看原始线程中的第二个答案。我从表面上接受它包含的关于调用代码的编译器的语句是评估所提供的表达式的语句。这意味着,如果该类型被用其他语言编写的代码使用,则该上下文中的 C# 或 VB 特定表达式将失败。

【讨论】:

  • 为了避免 GetType() 在 VB 中被保留,我倾向于使用 &lt;DebuggerDisplay("{Me.GetType().Name,nq}: ...")&gt;,以便在我更改类名时它继续工作。
  • @Fabulous,我试过了,但没有用。也许我做错了什么,所以我会再试一次,但我上面发布的内容对我有用。
  • 嗯...刚试过Me.GetType,它奏效了。不知道我第一次做了什么不同,但至少现在我们有两个选择。
  • 我想如果没有我,你可能已经完成了GetType。我不知道处理属性时是如何解决的,但我的猜测是,如果解决的是运算符GetType,而不是方法。
猜你喜欢
  • 2012-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-26
  • 2015-10-28
  • 1970-01-01
  • 2012-08-08
相关资源
最近更新 更多