C# 如何修复脏属性的设计?它失败,因为int必须是引用类型

C# 如何修复脏属性的设计?它失败,因为int必须是引用类型,c#,C#,我想把我的类中的单个属性标记为肮脏 我遇到了一种将整个类标记为肮脏的方法。这可以简化为 class DirtyClass { private string bar; private int foo; public string Bar { get { return bar; } set { SetProperty(ref bar, value); } } public int Foo {

我想把我的类中的单个属性标记为肮脏

我遇到了一种将整个类标记为肮脏的方法。这可以简化为

class DirtyClass
{
    private string bar;
    private int foo;

    public string Bar
    {
        get { return bar; }
        set { SetProperty(ref bar, value); }
    }

    public int Foo
    {
        get { return foo; }
        set { SetProperty(ref foo, value); }
    }

    public bool IsDirty { get; private set; }

    protected void SetProperty<T>(ref T field, T value)
    {
        if (!EqualityComparer<T>.Default.Equals(field, value))
        {
            field = value;
            IsDirty = true;
        }
    }
}

        if (c.Foo.GetIsDirty())
        {
            // Update parameter
            SetParameter(c.Foo.GetValue());
        }
class目录属性,其中T:class
这一行表示T应该是一个引用类型。如果希望允许int作为模板,请删除where部分。所以说

class DirtyProperty<T>
类DirtyProperty

你明白这句话的意思吗

where T : class
在你的代码里呢

它是一个泛型类型约束,表示T应该是类类型,即引用类型


如果希望T是任何类型,请删除该行。

是否有一个名为
GetIsDirty
的方法重置标志?WTFbtw。首先,我认为脏旗是个愚蠢的想法。版本计数器有更好的属性。版本计数器有更好的属性。你能告诉我你建议的方向吗。或者可能添加带有代码的答案?
        if (c.Foo.GetIsDirty())
        {
            // Update parameter
            SetParameter(c.Foo.GetValue());
        }
class DirtyProperty<T> where T : class
class DirtyProperty<T>
where T : class