C# 如何检查T对象的类型?

C# 如何检查T对象的类型?,c#,.net,generics,C#,.net,Generics,我有一个功能 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 } 首先,确保不要仅仅因为泛型看起来不错或消除了重复代码而将其用于非泛型。如果是这样,请继续 其次,您可以使用is检查类型是否与您需要的类型匹配: if (objectData

我有一个功能

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 
}

首先,确保不要仅仅因为泛型看起来不错或消除了重复代码而将其用于非泛型。如果是这样,请继续

其次,您可以使用
is
检查类型是否与您需要的类型匹配:

if (objectData is MyObject1)
{
    ...
}
else if (objectData is MyObject2)
{
    ...
}
如果您可以控制类型,还可以使用基类并使用泛型约束来缩小类型的范围
T
可以是:

Boolean MainFunction<T>(T objectData, string Id, out string Value) where T : BaseClass
{
}
Boolean main函数(T objectData,string Id,out string Value),其中T:BaseClass
{
}

你能举个例子说明为什么你需要知道传递的类型吗?不清楚你的意思:
“我想检查T objectData是main函数中的MyObject1还是MyObject2”
-您想确定什么?为
MyObject1
MyObject2
创建一个基类,并使用一个类似的
,其中T:BaseClass
,但您可以重新考虑您的设计,如果在泛型方法中检查类型,则可能不需要泛型。我的意思是,Main函数中的参数objectData是MyObject1还是MyObject2,因为我正在将不同的对象类型传递给MainFunction。我同意Patrick的回答,在这里使用重载而不是泛型会更好。是的。很抱歉,我的问题中包含了where T:BaseClass。您好,我理解了您的答案,并在MSDN上阅读了更多关于泛型的内容。谢谢你的帮助。
Boolean MainFunction<T>(T objectData, string Id, out string Value) where T : BaseClass
{
}