如何在谓词(即类的属性)中使用类属性?

时间:2019-06-27 14:58:21

标签: c#

我的课程具有以下结构(将省略的无关部分缩小):

public class MyClass<T>
{
    private T svalue;
    private Predicate<T> spredicate;

    private void Update(T nvalue)
    {
        if(spredicate(nvalue))
            svalue = nvalue;
    }

    public MyClass(Predicate<T> condition){
        spredicate = condition;
    }

    public T Value
    {
        get { return svalue; }
        set { Update(value); }
    }
}

基本上,它存储一个值,并且仅在新值适合谓词时才允许对其进行更改。

我希望以下代码能够正常工作:

var myvar = new MyClass<int>(x => Math.Abs(x - myvar.Value < 10));

但是,由于“我正在使用尚未设置值的局部变量”,因此无法编译。

最后,我希望能够在该谓词中引用公共类属性。有办法吗?

1 个答案:

答案 0 :(得分:1)

如果您希望谓词引用一个类实例,则将其传递给:

FolderPath

我们可以改为给谓词第二个public class MyClass<T> { private T svalue; private Func<MyClass<T>, T, bool> spredicate; private void Update(T nvalue) { if (spredicate(this, svalue)) svalue = nvalue; } public MyClass(Func<MyClass<T>, T, bool> condition) { spredicate = condition; } public T Value { get { return svalue; } set { Update(value); } } public static void Example() { var myvar = new MyClass<int>((self, newval) => Math.Abs(newval - self.svalue) < 10); } } 参数,而不是T,但是对于哪个参数是旧值而哪个参数是新值会感到困惑。