[英]How to create a class that uses a generic type that allows nullable and non-nullable types
我正在嘗試創建一個類以用作其他對象中的字段,該對象可以保存臨時的未保存值,直到對該對象調用SaveChanges方法為止,以便可以將該值傳遞給存儲的proc,該proc將更新任何-null具有新值的字段,並保留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
,這使得它可以與可空類型一起使用,但是如何使它與所有數據類型一起使用? 我是否真的需要創建兩個不同的類來處理兩種不同的情況?
謝謝,本
什么阻礙了您做自己想做的事情? 我猜這是在哪里約束。 如果將其丟棄,我看不出問題所在。
編輯
您不能同時擁有這兩種方式。 泛型類要么知道一些有關將空值分配給值的知識,然后就不能將值類型(如int)作為允許的類型,否則就不知道。
如果是前一種情況,則您的泛型類需要約束,並且您不能將其用於諸如int之類的值類型
在后一種情況下,不需要約束,並且如果泛型參數表是引用類型,則仍可以將null分配給值
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.