以下程序输出“我们还有别的东西”。如何正确确定传入类型的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");
}
}
答案 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");
}
}