我想要做的是创建一个带有#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;
}
如果允许这种类型的操作,我要找的是正确的语法。
答案 0 :(得分:6)
您正在寻找的是以下
#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 ...
}
答案 1 :(得分:1)
语法为:
using type_var = System.Int32;
正如Eric Lippert在评论中指出的那样,在using
别名声明的右侧查找类型名称的算法不会使用关键字,而是采用标识符。因此需要System.Int32
而不是int
。