Re: [問題] 泛型的約束條件?

看板C_Sharp作者 (NiceBoat.)時間15年前 (2010/08/23 09:36), 編輯推噓0(0011)
留言11則, 2人參與, 最新討論串2/2 (看更多)
public static TItem 相加<TItem>(TItem 左值, TItem 右值) { string s = (typeof(TItem)).FullName; TItem RV; switch(s) { case "System.Int32": int? L = 左值 as int?; ← 直接用(int) 或 as int都不能過 int? R = 左值 as int?; if (!L.HasValue || !R.HasValue) throw new ArithmeticException("相加時,轉型為System.Int32失敗"); RV = (L.Value + R.Value) as TItem; ← 不給轉 break; default: throw new ArgumentException("這個型別無法相加"); } return RV; } ============================================================================= 試過第二條路,但還是不行........ 用多載或是轉型有個缺點: 如果我要用的型別會用到別的參考,例如XNA的Vector2 那就得把XNA.Framework叫進來 這會變得很奇怪...... 我現在寫的算是「小工具」之類的東西 未來可能會拿去別的地方用 如果今天這樣寫下去,那未來即使如果我寫的程式根本用不到XNA的組件 也得把XNA的參考加進來才能用,更不用說使用者還得裝XNA runtime的麻煩 拆散寫,雖然可行,但似乎也不太對 這會造成不少分散的程式碼..... 到時候要修改個東西會不知道該去哪裡找..... orz..... 寫個加法怎麼這麼難..... -- 20330 6/17 - □ (本文已被吃掉) 幹!這梗有毒...救命~~ 20331 6/17 - □ (本文已被吃掉) 〒 〒 20332 1 6/17 - □ (本文已被吃掉) ▼▼▼▼ 20333 XX 6/17 - 囧 (哈哈拎北有毒) \▲▲▲▲\ = ●20334 1 6/17 - □ (本文已被吃掉) 20335 6/17 - □ (本文已被吃掉) 口卡口卡嘗百草 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.27.109.77

08/23 11:42, , 1F
as只能用在參考型別 不能用在實質型別 編譯當然不會過
08/23 11:42, 1F

08/23 11:43, , 2F
實質型別不可以有null 所以沒必要檢查function的參數是不
08/23 11:43, 2F

08/23 11:44, , 3F
null 你這算是多此一舉
08/23 11:44, 3F

08/23 11:45, , 4F
再者 對於C#而言 有問號和沒問號其實是被視為兩種不一樣
08/23 11:45, 4F

08/23 11:46, , 5F
的資料型態 不能互相通用
08/23 11:46, 5F

08/23 11:58, , 7F
另外檢查型別其實也不一定要用typeof 用is關鍵字也可以
08/23 11:58, 7F

08/23 14:56, , 8F
檢查是否為null,是因為可能會去把參考型別相加,class
08/23 14:56, 8F

08/23 14:57, , 9F
也是可以附載運算子的
08/23 14:57, 9F

08/23 14:59, , 10F
另外int加問號的問題是..... 因為int不可為null,所以
08/23 14:59, 10F

08/23 14:59, , 11F
用nullable
08/23 14:59, 11F
文章代碼(AID): #1CST2rMS (C_Sharp)
文章代碼(AID): #1CST2rMS (C_Sharp)