作者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
1F:→ remmurds:as只能用在参考型别 不能用在实质型别 编译当然不会过 08/23 11:42
2F:→ remmurds:实质型别不可以有null 所以没必要检查function的参数是不 08/23 11:43
3F:→ remmurds:null 你这算是多此一举 08/23 11:44
4F:→ remmurds:再者 对於C#而言 有问号和没问号其实是被视为两种不一样 08/23 11:45
5F:→ remmurds:的资料型态 不能互相通用 08/23 11:46
7F:→ remmurds:另外检查型别其实也不一定要用typeof 用is关键字也可以 08/23 11:58
8F:→ SDNiceBoat:检查是否为null,是因为可能会去把参考型别相加,class 08/23 14:56
9F:→ SDNiceBoat:也是可以附载运算子的 08/23 14:57
10F:→ SDNiceBoat:另外int加问号的问题是..... 因为int不可为null,所以 08/23 14:59
11F:→ SDNiceBoat:用nullable 08/23 14:59