我的课程具有以下结构(将省略的无关部分缩小):
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));
但是,由于“我正在使用尚未设置值的局部变量”,因此无法编译。
最后,我希望能够在该谓词中引用公共类属性。有办法吗?
答案 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
,但是对于哪个参数是旧值而哪个参数是新值会感到困惑。