我正在尝试创建一个类,将其用作其他对象中的字段,这些字段可以保存临时未保存的值,直到调用对象上的SaveChanges方法为止,这样我就可以将该值传递给存储的proc,它将用新值更新任何非空字段,并将字段保留为null作为其原始值。
我想要做到这一点:
private Field<int> MyInt;
private Field<int?> MyNullableInt;
private Field<string> MyString;然后能够使用这样的字段对象:
MyInt = new Field<int>(1); // initialise with a value
MyInt.Value = 2; // assign a new value internally marking it as having a new value
int x = MyInt.Value; // read the current value
int? newInt = MyInt.NewValue; // read the newly set value, or null if there is no new value我希望能够创建以下字段:
。
我仍然在学习泛型,但是我开始理解它们,然而,我对此有点执着,因为我可以在上面创建一个需要的Field对象,它可以用于非空类型,或者是可空类型,但不能同时使用。
这就是我到目前为止想出的:
protected class Field<T> where T : struct {
private T _Field;
private bool _IsNew;
public Field(T InitialValue) {
_Field = InitialValue;
_IsNew = false;
}
public T Value {
get { return _Field; }
set {
if (!_Field.Equals(value)) {
_Field = value;
_IsNew = true;
}
}
}
public Nullable<T> NewValue {
get {
if (_IsNew) {
_IsNew = false;
return _Field;
}
return null;
}
}
public bool IsNew { get { return _IsNew; } }
}这个效果很好。我还可以将类型约束更改为where T : class,并将Nullable<T>更改为NewValue方法上的T,这使得它可以处理可空类型,但是如何使它与所有数据类型一起工作呢?我真的需要创建两个不同的类来处理这两个不同的场景吗?
谢谢,本
发布于 2010-10-11 14:40:03
什么能阻止你做你想做的事?我猜是在哪里的约束。如果你放下它,我看不出是什么问题。
编辑
你不能两全其美。或者您的泛型类知道有关赋值给值的一些信息,然后您不能将值类型(如int)作为允许的类型,或者您不知道。
如果是前者,则泛型类需要约束,并且不能将其用于int之类的值类型。
在后一种情况下,不需要约束,如果泛型参数是引用类型的,则仍然可以将null赋值为值。
https://stackoverflow.com/questions/3907159
复制相似问题