我目前正在研究C#泛型,我有几个问题。在泛型中的动态类型
1)在下面的代码中,“Test”中T的类型比较会减慢程序的运行速度吗?在其他语言中,这是在编译时处理的,但我不了解C#。
2)由于sizeof显然不会工作,我不得不使用System.Runtime.InteropServices.Marshal.SizeOf。它是否正确? 3)我还没有在C#中看到类似这样的代码,但是有什么不对吗,或者我在这里做的事情是完全正确的吗?最后,这个例子中的方法会带来一些类型,如果它无法处理它,则抛出异常。一些类型将被独立处理,其他像short/int/long一起被处理,这取决于它们的大小。
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Test<int>();
Test<long>();
Test<string>();
Console.ReadLine();
}
static void Test<T>()
{
Type type = typeof(T);
if (type == typeof(int) || type == typeof(long))
{
Console.WriteLine("int");
Console.WriteLine(System.Runtime.InteropServices.Marshal.SizeOf(type).ToString());
}
else if (type == typeof(string))
{
Console.WriteLine("string");
}
}
}
}
1)你可以用计时器运行它并检查。 2)你有没有试过sizeof?这对我来说可以。 3)你拥有它的方式很好(只要在例外的末尾添加最后一个elseif)。虽然我会用switch()来做。与C++不同,switch语句可以比较多的int /枚举。 – 2012-04-13 23:49:57