作者SDNiceBoat (NiceBoat.)
看板C_Sharp
標題Re: [問題] 泛型的約束條件?
時間Mon Aug 23 09:36:50 2010
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