【问题标题】:How can I combine two C# annotations into a "shortcut" annotation?如何将两个 C# 注释组合成一个“快捷方式”注释?
【发布时间】:2014-06-30 08:58:45
【问题描述】:

在 Unity 中,我发现将检查器变量(通过 Unity 的反射或魔法设置)声明为私有并使用 [SerializeField] 属性注释它们是一种方便的模式。这使编程界面保持整洁,同时允许 Inspector 设置字段。我也使用 Resharper,为了让它知道这些字段是隐式设置的,我使用属性 [UsedImplicitly(ImplicitUseKindFlags.Assign)]

这给我留下了很多变量作为注释的砖墙,在那里找到变量需要不必要的努力:

[SerializeField, UsedImplicitly(ImplicitUseKindFlags.Assign)]
private Transform headingLabel;
[SerializeField, UsedImplicitly(ImplicitUseKindFlags.Assign)]
private Transform coolDataLabel;
[SerializeField, UsedImplicitly(ImplicitUseKindFlags.Assign)]
private GameObject yetAnotherLabelToMakeThePoint;

如何将这些注释组合成一个具有相同行为的注释[PrivateInspectorVariable]

【问题讨论】:

    标签: c# annotations unity3d


    【解决方案1】:

    通过 Stack Overflow 上的this answer

    但是,标准工具中没有任何东西可以采用两个属性实例并生成一个。

    (理论上,重写 MSIL 的后处理器可以做到这一点。)

    我的建议是将你的属性写在不同的行上,并使用空格使它们更易于阅读:

    [SerializeField]
    [UsedImplicitly(ImplicitUseKindFlags.Assign)]
    private Transform headingLabel;
    
    [SerializeField]
    [UsedImplicitly(ImplicitUseKindFlags.Assign)]
    private Transform coolDataLabel;
    
    [SerializeField]
    [UsedImplicitly(ImplicitUseKindFlags.Assign)]
    private GameObject yetAnotherLabelToMakeThePoint;
    

    【讨论】:

    • 所以,可能不可能,这也是我开始想的。如果有人有解决方案,我将留下这个问题。 (我更喜欢 oneliners 因为这里的所有属性都完全相同,并且有 20-30 个变量正在进行 - 更短的卷轴:D)
    • 是的,这完全是一个偏好问题。对你有用的是最好的选择。也许有人会修改语言规范以允许复合属性,但不太可能,因为我认为这需要多重继承。
    猜你喜欢
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 2023-01-02
    • 2017-10-29
    • 2011-01-01
    • 1970-01-01
    相关资源
    最近更新 更多