gpt4 book ai didi

c# - debuggerdisplay 未按预期显示字段值

转载 作者:行者123 更新时间:2023-12-03 04:41:12 26 4
gpt4 key购买 nike

public class A
{
[DebuggerDisplay("{DDBpp1()}")]
public byte[] Bpp = new byte[2];

public string DDBpp1()
{
return "DDBpp";
}

public string DDBpp2()
{
short result;

if (BitConverter.IsLittleEndian)
{
var bppCopy = new byte[2];
Bpp.CopyTo(bppCopy, 0);
Array.Reverse(bppCopy);
result = BitConverter.ToInt16(bppCopy, 0);
}
else
{
result = BitConverter.ToInt16(Bpp, 0);
}

return result.ToString();
}
}

DebuggerDisplay 属性中使用哪种方法(DDBpp1 或 DDBpp2)并不重要。调试器下的值列始终由 {byte[2]} 填充。我期望 DDBpp1() 方法使用字符串“DDBpp”,或者 DDBpp2() 方法使用短值。该问题出现在 VS15/17 社区下。

是否可以更改调试器下显示的字段值?

最佳答案

如果将 [DebuggerDisplay("{DDBpp2()}")] 放在类本身上,它将在调试器中显示 bytes[] 移位的 int16 内容- 对于类(class):

DebuggerDisplayAttribute on class

如果将 Bpp 实现为成员或属性,没有什么区别,并且为其提供更多属性也无济于事。

    [DebuggerDisplay("{DDBpp2()}", Name = "{DDBpp2()}", TargetTypeName = "{DDBpp2()}", Type = "{DDBpp2()}"]
public byte[] Bpp { get; set; } = new byte[2];

也许把它放在类里面可以帮助你:

[DebuggerDisplay("{CDBpp2()}")]
[DebuggerDisplay("{DDBpp2()}")]
public class A
{
[DebuggerDisplay("{DDBpp2()}", Name = "{DDBpp2()}", TargetTypeName = "{DDBpp2()}", Type = "{DDBpp2()}")]
public byte[] Bpp { get; set; } = new byte[2] { 255, 255 };

public byte[] Cpp { get; set; } = new byte[2] { 11, 28 };

public string CDBpp2() => ToDebugStr(Cpp);

public string DDBpp2() => ToDebugStr(Bpp);

string ToDebugStr(byte[] b)
{
short result;
if (BitConverter.IsLittleEndian)
{
var bppCopy = new byte[2];
b.CopyTo(bppCopy, 0);
Array.Reverse(bppCopy);
result = BitConverter.ToInt16(bppCopy, 0);
}
else
{
result = BitConverter.ToInt16(b, 0);
}
return result.ToString();
}
}

如果您仔细查看 msdn 文档中给定的示例,您会发现该属性仅应用于类级别 - 但我很困惑,为什么他们不将该属性限制为类。

我看了一下source of debuggerDisplayAttribute.cs - 它适用于更多类(class),您甚至可以多次使用。

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Delegate | AttributeTargets.Enum | AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Assembly, AllowMultiple = true)]

我的猜测是 VS 不会对成员/属性/等实现所有可能的结果。对于 IDE,这就是它不起作用的原因。如果多次提供该属性,则调试器 View 中仅使用第一个:请参阅我的示例并对其进行调试。

关于c# - debuggerdisplay 未按预期显示字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47488989/

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