看板 C_Sharp 關於我們 聯絡資訊
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
remmurds:as只能用在參考型別 不能用在實質型別 編譯當然不會過 08/23 11:42
remmurds:實質型別不可以有null 所以沒必要檢查function的參數是不 08/23 11:43
remmurds:null 你這算是多此一舉 08/23 11:44
remmurds:再者 對於C#而言 有問號和沒問號其實是被視為兩種不一樣 08/23 11:45
remmurds:的資料型態 不能互相通用 08/23 11:46
remmurds:另外檢查型別其實也不一定要用typeof 用is關鍵字也可以 08/23 11:58
SDNiceBoat:檢查是否為null,是因為可能會去把參考型別相加,class 08/23 14:56
SDNiceBoat:也是可以附載運算子的 08/23 14:57
SDNiceBoat:另外int加問號的問題是..... 因為int不可為null,所以 08/23 14:59
SDNiceBoat:用nullable 08/23 14:59