1.Nullable類型可以這麼用! int? cursor;
//其它邏輯
cursor = (++cursor) ?? default(int);
上述代碼的含義是,如果cursor為空白值,則取int型的預設值0,否則,將cursor值增加1。特別注意++cursor,當cursor為空白值的時候,++cursor仍然返回空值(cursor+1同樣返回空值)。
關於Nullable類型,有點覺得不是太好,那就是賦值的時候可以直接賦值,取值的時候卻要通過Value屬性擷取,比如
int? cursor;
cursor = 5; //直接賦值
int x = cursor.Value; //通過value屬性取值
如果能直接透明地取值就好了,比如像這樣 int? cursor;
cursor = 5;
int x = cursor;
2.關於泛型約束的思考
曾經思考過這樣一個問題,在下面樣本的情況中,泛型是否有價值。比如,我想建立一個容器內,裝入容器內的元素必須實現了介面IComparable。 public class Container<T> where T : IComparable
{
private T[] innerArray;
}
public class Container2
{
private IComparable[] innerArray;
}
上面Container類使用了泛型和約束,Container2隻是一個簡單的類。表面看起來,Container2能夠做與Container一樣的事情,那麼泛型實現的Container有什麼優勢了?在於兩點:
(1)Container2 對象可以容納任意類型(只要實現了IComparable介面)的對象,而某個特定的Container對象只能容納特定類型(當然實現了IComparable介面)的對象。也就是說,Container2 中的元素的類型是多樣的,而某個特定的Container對象中的元素的類型卻是統一的。
(2)多繼承。如果元素類型要從IComparable和另外一個介面IExample繼承,那麼,如果不使用泛型實現,則一定會存在向下轉換的操作,而泛型實現可以避免這一點: public class Container<T> where T : IComparable ,IExample
{
private T[] innerArray;
}