2014-10-06 84 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