gpt4 book ai didi

c# - 在 [DebuggerDisplay] 属性中使用扩展方法

转载 作者:太空狗 更新时间:2023-10-29 18:28:05 25 4
gpt4 key购买 nike

属性 [DebuggerDisplay] ( Using DebuggerDisplayAttribute ) 允许定义 VS 2010/2008 调试器中的显示。通过修改 AutoExp.cs/.dll,我什至可以覆盖系统类型和第三方类型的显示,例如

[assembly: DebuggerDisplay (@"\{Name = {Name} FullName = {FullName}}", Target = typeof (Type))]

在内部花括号中,我可以引用字段、属性和方法。是否可以引用扩展方法

例如,我尝试显示较短的类型名称,例如$SCG.Dictionary 而不是 System.Collections.Generic.Dictionary。我将此添加到 AutoExp.cs:

using DbgDisp;

[assembly: DebuggerDisplay (@"\{Name = {Name} ShortName = {ShortName()}}", Target = typeof (Type))]

namespace DbgDisp {
public static class Ext {
public static string ShortName (this Type t) { return string.Format ("[{0}]", t.Name); }
} // Ext
} // DbgDisp

但调试器提示:名称“ShortName”在当前上下文中不存在。

我是不是遗漏了什么,或者只是无法在那里使用扩展方法?

我知道我可以覆盖 ToString (),但这只对我自己的类型有帮助。

最佳答案

实际上你可以使用扩展方法将 this 作为参数传递

[assembly: DebuggerDisplay(@"NetGuid = {ToString()} OracleGuid = {GuidExtensions.ToVarChar(this)}", Target = typeof(Guid))]
public static class GuidExtensions
{
public static string ToVarChar(this Guid guid)
{
var newBytes = new byte[16];
var oldBytes = guid.ToByteArray();
for (var i = 8; i < 16; i++)
newBytes[i] = oldBytes[i];

newBytes[3] = oldBytes[0];
newBytes[2] = oldBytes[1];
newBytes[1] = oldBytes[2];
newBytes[0] = oldBytes[3];
newBytes[5] = oldBytes[4];
newBytes[4] = oldBytes[5];
newBytes[6] = oldBytes[7];
newBytes[7] = oldBytes[6];

return new Guid(newBytes).ToString("N").ToUpper();
}
}

关于c# - 在 [DebuggerDisplay] 属性中使用扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5604325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com