gpt4 book ai didi

c# - 如何使用 CodeDOM 的 CodeMemberProperty 为属性 getter 或 setter 生成 DebuggerStepThrough 属性

转载 作者:行者123 更新时间:2023-11-30 22:35:06 24 4
gpt4 key购买 nike

如何使用 CodeDOM 在 getter/setter 上生成 DebuggerStepThroughAttribute?

这个问题来自 MSDN documentation和一个 question on StackOverflow .

最佳答案

CodeMemberProperty 的 CustomAttributes 是 CodeAttributeDeclarationCollection 类型。如果在此处指定了一个属性,则会将其添加到属性声明行上方:生成的代码将无法编译。

CodeMemberProperty 的 GetStatements 和 SetStatements 是集合:我不能在它们上指定自定义属性。

这是我在 Reflector 的帮助下在 Microsoft CSharpCodeGenerator 中看到的内容:

private void GenerateProperty(CodeMemberProperty e, CodeTypeDeclaration c)
{
if ((this.IsCurrentClass || this.IsCurrentStruct) || this.IsCurrentInterface)
{
if (e.CustomAttributes.Count > 0)
{
this.GenerateAttributes(e.CustomAttributes);
}
if (!this.IsCurrentInterface)
{
if (e.PrivateImplementationType == null)
{
this.OutputMemberAccessModifier(e.Attributes);
this.OutputVTableModifier(e.Attributes);
this.OutputMemberScopeModifier(e.Attributes);
}
}
else
{
this.OutputVTableModifier(e.Attributes);
}
this.OutputType(e.Type);
this.Output.Write(" ");
if ((e.PrivateImplementationType != null) && !this.IsCurrentInterface)
{
this.Output.Write(this.GetBaseTypeOutput(e.PrivateImplementationType));
this.Output.Write(".");
}
if ((e.Parameters.Count > 0) && (string.Compare(e.Name, "Item", StringComparison.OrdinalIgnoreCase) == 0))
{
this.Output.Write("this[");
this.OutputParameters(e.Parameters);
this.Output.Write("]");
}
else
{
this.OutputIdentifier(e.Name);
}
this.OutputStartingBrace();
this.Indent++;
if (e.HasGet)
{
if (this.IsCurrentInterface || ((e.Attributes & MemberAttributes.ScopeMask) == MemberAttributes.Abstract))
{
this.Output.WriteLine("get;");
}
else
{
this.Output.Write("get");
this.OutputStartingBrace();
this.Indent++;
this.GenerateStatements(e.GetStatements);
this.Indent--;
this.Output.WriteLine("}");
}
}
if (e.HasSet)
{
if (this.IsCurrentInterface || ((e.Attributes & MemberAttributes.ScopeMask) == MemberAttributes.Abstract))
{
this.Output.WriteLine("set;");
}
else
{
this.Output.Write("set");
this.OutputStartingBrace();
this.Indent++;
this.GenerateStatements(e.SetStatements);
this.Indent--;
this.Output.WriteLine("}");
}
}
this.Indent--;
this.Output.WriteLine("}");
}
}

仔细检查 if (e.HasGet) 周围的行,这似乎是不可能的。

关于c# - 如何使用 CodeDOM 的 CodeMemberProperty 为属性 getter 或 setter 生成 DebuggerStepThrough 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7547169/

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