自己回答一下好了~~
根據MSDN,程式碼要改為:
public class TreeNode<ItemType> where itemType : IComparable<itemType>
{
// ... omitted
public void comapre(ItemType v )
{
if( m_Value.CompareTo(v) > 0 ) // use CompareTo() method
{
// do something
}
}
}
查了網路,http://www.artima.com/intv/generics2.html? 裡面
有段描述C#和C++ generic的不同,
這是因為C#是run time時候,才會做instantiation,
反觀C++是在compile or link
當然就像FantasyRyu大講的,如果你是用自訂型別,
一定要overload operator> ~~
※ 引述《FantasyRyu (眩惑之龍)》之銘言:
: ※ 引述《Cloud (抓不住...)》之銘言:
: : 下述是我學習C#的疑問
: : public class TreeNode<ItemType>
: : {
: : public ItemType m_Value; // member
: : public TreeNode(ItemType val){m_Value = val; } // Ctor
: : public void comapre(ItemType v )
: : {
: : if( m_Value > v ) // 編譯錯誤,這裡的值會無法比較,即使
: : // ItemType為int
: : {
: : // some operation
: : }
: : }
: : }
: : 請問該如何實做?? 是否需要ICompariable ??
: IComparable是用來排序的,跟你的寫法無關,因為你直接用>符號來比較。
: 你的ItemType是不是Int不重要。
: 重要的是如果你要自定類別,那麼Operator是一定要重寫的。
: 不然「int > int」這樣編譯器看得懂,「科科 > 科科」就看不懂了,
: 因為你沒有定義自定類別要怎麼比大小。
: 但是重寫 > 的語法我忘了,科科
: public static bool operator > (科科 a, 科科 b)
: {
: return a.value > b.value;
: }
: 我憑印象亂寫的,請查書確定一下。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.174.33.12
※ 編輯: Cloud 來自: 218.174.33.12 (02/25 19:45)
※ 編輯: Cloud 來自: 218.174.33.12 (02/25 19:48)