C#实现依赖于系统的整数

时间:2011-03-15 06:11:29

标签: c# integer

我需要定义一个依赖于系统的整数类型,以便与某些低级库相兼容。我已经设置了x86和x64项目配置,并为它们定义了条件编译符号(IA32和INTEL64)。

所以,我想做以下事情:

#if IA32
    typedef int SysInt;
    typedef uint SysUInt;
#elif INTEL64
    typedef long SysInt;
    typedef ulong SysUInt;
#endif

但是,由于typedef在C#中不可用,因此不起作用。实现这个的最佳选择是什么?

提前致谢。最好的问候。

4 个答案:

答案 0 :(得分:11)

您需要IntPtrUIntPtr,它们在32位进程中为32位,在64位进程中为64位。由于这些类型自动采用进程的“位数”,因此不需要条件编译或两个不同的项目配置来使用它们。

如果你真的想对数值进行数学运算,你应该将它们转换为longulong进行数学计算,然后再转回IntPtr或{{1}将它们传递给外部库。

答案 1 :(得分:3)

您可以尝试别名:

#if IA32
using SysInt = System.Int32;
#elif INTEL64
using SysInt = System.Int64;
#endif

答案 2 :(得分:3)

似乎你可以做到这样的事情,至少:

#if IA32
    using SysInt = System.Int32;
    using SysUInt = System.UInt32;
#elif INTEL64
    using SysInt = System.Int64;
    using SysUInt = System.UInt64;
#endif

这只是给你的类型别名。我不知道这对你的目的有多大用处,但它确实有用。

答案 3 :(得分:0)

#if IA32
public struct Sys
{
   public int Int { get; set; }
}
#elif INTEL64
public struct Sys
{
   public long Int { get; set; }
}
#endif