2014-10-06 106 views
0

我有一個功能。如何檢查T對象的類型?

protected Boolean MainFunction<T>(T objectData, string Id, out string Value) 
{ 
    //here I need to check whether T equal the object I need or not 
} 

和上面MainFunctionFunction1Function2其中I通過MyObject1MyObject2調用。

我想檢查T objectData無論是MyObject1還是MyObject2裏面的MainFunction。請給我任何建議。

public bool Function1(string ID, out string Value, out ErrorReport error) 
{ 
    return MainFunction(Data.MyObject1, ID, out Value, out error); 
} 

public bool Function2(string ID, out string Value, out ErrorReport error) 
{ 
    return MainFunction(Data.MyObject2, ID, out Value, out error); 
} 
+0

你能舉個例子說明爲什麼你需要知道傳入的類型嗎? – 2014-10-06 14:27:39

+1

目前還不清楚你的意思是什麼:''我想檢查T objectData是否是MainObject中的MyObject1或MyObject2「 - 你想確定什麼? – David 2014-10-06 14:28:00

+5

擁有「MyObject1」和「MyObject2」的基類,並使用[where T:BaseClass'] [通用約束](http://msdn.microsoft.com/zh-cn/library/d5x73970.aspx)您可能會重新考慮您的設計,如果您使用泛型方法檢查類型,那麼您可能不需要泛型。 – Habib 2014-10-06 14:28:09

回答

0

首先,確保您不使用非泛型,因爲它看起來不錯或重複數據刪除代碼。如果是這種情況,繼續。

其次,你可以使用is檢查類型匹配你需要的:

if (objectData is MyObject1) 
{ 
    ... 
} 
else if (objectData is MyObject2) 
{ 
    ... 
} 

如果你有超過類型的控制,你也可以使用一個基類,並使用通用約束縮小向下類型T可以是:

Boolean MainFunction<T>(T objectData, string Id, out string Value) where T : BaseClass 
{ 
} 
+0

是的。對不起,我留下了T:BaseClass在我的問題中。 – PPPA 2014-10-06 14:33:55

+0

嗨,我明白你的答案,並有更多閱讀在MSDN關於泛型。感謝您的幫助。 – PPPA 2014-10-07 03:24:32