条件编译器类型定义

本文关键字:定义 类型 编译器 条件 | 更新日期: 2023-09-27 17:55:30

我想做的是创建一个带有 #if #else 的用户定义类型,以便稍后在代码中,我可以在执行变量声明时引用该类型。 下面是一个简单的例子

#define INT_ONLY
//#define LONG_ONLY
#if INT_ONLY
    using type_var as int;
#else
    using type_var as long;
#endif
private sub main() {
  type_var x = 0;
}

如果允许这种类型的操作,我正在寻找正确的语法。

条件编译器类型定义

您要查找的内容如下

#if INT_ONLY
using type_var = System.Int32;
#else
using type_var = System.Int64;
#endif

虽然我很好奇你为什么要这样做? 似乎会产生很多用户困惑。 我认为更好的解决方案是创建一个包装器类型,该包装器类型使用#ifdef作为实现细节来隐藏其存储类型(就像IntPtr所做的那样)

struct type_var {
#if INT_ONLY
  int m_value;
#else
  long m_value;
#endif
  public type_var(int i) {
    m_value = i;
  }
#if INT_ONLY
  public type_var(long l) {
    m_value = l;
  }
#endif
  public static operator type_var(int i) {
    return new type_var(i);
  }
#if INT_ONLY
  public static operator type_var(long i) {
    return new type_var(i);
  }
#endif
// Etc ...    
}

语法为:

using type_var = System.Int32;

正如 Eric Lippert 在评论中指出的那样,在using别名声明的右侧查找类型名称的算法不接受关键字,而是接受标识符。 因此需要System.Int32而不是int