使用泛型确定类型

时间:2010-11-24 01:33:51

标签: c#

以下程序输出“我们还有别的东西”。如何正确确定传入类型的DataType?

void Main()
{
    AFunction(typeof(string));
}

void AFunction<T>(T aType) {

    if (aType.GetType() == typeof(string)) {

        Console.WriteLine ("We have a string");

    } else {
        Console.WriteLine ("We have something else");
    }
}

5 个答案:

答案 0 :(得分:4)

使用is关键字。

if(aType is string)
    Console.WriteLine("We have a string");
else
    Console.WriteLine("We have something else");

使用这种逻辑时需要注意的一点是is对超类型会返回true,这可能会导致意外行为:

if(myObj is object)
    Console.WriteLine("This will always print");
else if(myObj is int)
    Console.WriteLine("This will never print");

答案 1 :(得分:2)

如果您正在寻找(小)有限列表中的类型,您可以使用'is'。

答案 2 :(得分:1)

我认为在这种情况下你不需要使用Generic Type。 您只需将对象类型发送到AFunction,然后使用is关键字,如下所示:

void AFunction(Object aType) 
{ 
     if (aType is string) { 

        Console.WriteLine ("We have a string"); 

    } else { 
        Console.WriteLine ("We have something else"); 
    } 
} 

顺便说一下,我认为Generic Type不适合这种用法。

答案 3 :(得分:0)

typeof(string)返回Type

因此编译器推断您要调用AFunction<Type>(typeof(string))

GetType返回Type,代表Type实例的Type类型。

typeof(Type)不等于typeof(string),因此结果完全符合预期。


你的意思是

AFunction<string>("Hello World");

void AFunction<T>(T value)
{
    if (value is string) ...
}

AFunction(typeof(string));

void AFunction(Type type)
{
    if (type == typeof(string)) ...
}

AFunction<string>();

void AFunction<T>()
{
    if (typeof(T) == typeof(string)) ...
}

答案 4 :(得分:0)

使用您当前的通话,您可以使A功能像这样:

void AFunction<T>(T aType)
{
    if ((aType as Type).Name == "String")
    {
        Console.WriteLine("We have a string");
    }
    else
    {
        Console.WriteLine("We have something else");
    }
}