Attribute [DebuggerDisplay](使用DebuggerDisplayAttribute)允许在VS 2010/2008的调试器中定义显示.通过修改AutoExp.cs/.dll,我甚至可以覆盖系统类型和第三方类型的显示,例如
[assembly: DebuggerDisplay (@"\{Name = {Name} FullName = {FullName}}", Target = typeof (Type))]
Run Code Online (Sandbox Code Playgroud)
在内部花括号中,我可以引用字段,属性和方法.是否可以引用扩展方法?
作为一个例子,我试图显示更短的类型名称,例如,$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
Run Code Online (Sandbox Code Playgroud)
但调试器抱怨:当前上下文中不存在名称"ShortName".
我错过了什么,或者只是不可能在那里使用扩展方法?
我知道我可以覆盖ToString (),但这只对我自己的类型有帮助.
c# extension-methods visual-studio-2010 debuggervisualizer debuggerdisplay
我正在使用 C# 中的古老 Windows 多媒体 API(WinMM.dll 中的 midiXyz 函数)。
在非流模式 ( )下打开 Midi Out 设备/端口后midiOutOpen,使用 ( ) 发送 SysExmidiOutLongMsg可以正常工作。
在流模式 ( )下打开 Midi Out 设备/端口后midiStreamOpen,使用 发送 SysExmidiOutLongMsg不起作用。
相反,midiOutLongMsg失败并出现错误MMSYSERR_NOTSUPPORTED(= 8)。错误文本为:“不支持此功能。使用功能函数来确定驱动程序支持哪些功能和消息。 ”
然而,根据 MSDN,( midiOutLongMsg) 也应该与流句柄一起使用。
Jeff Glatt 的优秀 MIDI 信息页面还声称 SysEx 和流媒体可以一起使用(参见页尾))。
通过使用 ( midiStreamOut) midiStreamOut 排队来发送缓冲的 SysEx 消息效果很好。但是,我也需要/想要直接使用 发送 SysEx midiOutLongMsg。
我已经检查了各种开源 Midi 库(托管和非托管)、几个 Midi 驱动程序源甚至 WINE 的 WinMM.dll …