【问题标题】:Why does ReSharper need to scan all files when converting a property to an auto property?为什么 ReSharper 在将属性转换为自动属性时需要扫描所有文件?
【发布时间】:2011-03-04 17:10:24
【问题描述】:

访问具有支持字段的属性有什么区别

    private int _id;
    public int Id
    {
        get { return _id; }
        set { _id = value; }
    }

相对于自动属性?

public int Id { get; set; }

我问的原因是,当让 ReSharper 将属性转换为自动属性时,它似乎扫描了我的整个解决方案,或者至少扫描了所有 aspx 文件。

我看不出有什么理由可以从课外看出这两者之间应该有任何区别。有吗?

【问题讨论】:

    标签: c# .net asp.net resharper automatic-properties


    【解决方案1】:

    编译器会自动为 Auto-Properties 生成支持字段,所以不,应该没有任何区别。

    ReSharper 正在扫描所有文件,因为如果您定义了 Partial 类,即使代码存在于物理上不同的文件中,它也可能使用支持字段而不是公共属性。

    例如:

    // MyClass.cs
    public partial class MyClass
    {
        int _id;
        public int ID { get { return _id; } set { _id = value; } }
        public MyClass(int identifier)
        {
            ID = identifier;
        }
    }
    
    // MyClass2.cs
    public partial class MyClass
    {
        public void ChangeID(int newID) 
        {
            _id = newID;
        }
    }
    

    ReSharper 必须扫描所有文件,因为它无法知道部分类可能在哪里定义。

    【讨论】:

    • +1 非常有道理,为什么 OP 会说它正在扫描他的 ASPX.CS,因为它们都是部分的,并且有问题的代码很可能是属性所在的 page.aspx.cs定义,因此是部分的。
    • 非常好的解释,我几乎准备好询问 OP 他是否确定 ReSharper 是否真的这样做了
    • 为什么不同项目中的文件需要扫描,因为必须在同一个项目中定义Partial类?此外,如果它是 Parttail,ReSharper 应该能够从类中看到它的自身,因为 parttail 类的所有“位”都必须标记为 parttail。
    • @Ian -- 我不确定其他解决方案中的文件,但 ReSharper 在扫描文件之前无法知道文件的内容,因此它必须扫描所有文件以找到任何文件部分类已定义。
    猜你喜欢
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    相关资源
    最近更新 更多