我正在尝试创建一个类作为其他对象中的字段,可以保存临时未保存的值,直到在对象上调用SaveChanges方法,这样我就可以将值传递给存储过程,这将是使用新值更新任何非空字段,并保留以null为原始值的字段。
我希望能够做到这一点:
private Field<int> MyInt;
private Field<int?> MyNullableInt;
private Field<string> MyString;
然后能够像这样使用Field对象:
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
,并在NewValue方法上将Nullable<T>
更改为T
,这使得它可以使用可空类型,但是如何让它适用于所有类型数据类型?我真的需要创建两个不同的类来处理两种不同的场景吗?
谢谢, 本
答案 0 :(得分:2)
什么阻止你做你想做的事情?我的猜测是那里的约束。如果你放弃它我不明白是什么问题。
修改强>
你无法双管齐下。要么泛型类知道有关为值赋值的空值,然后你不能将值类型(如int)作为允许类型,或者你不能。
如果前者是这种情况,你的泛型类需要约束,你不能将它用于像int这样的值类型
在后一种情况下,不需要约束,您仍然可以为值 IF 赋值null通用参数是引用类型