Show/Hide Toolbars

XSharp

 

-vo2 选项指示编译器将所有 STRING(System.String)类型的变量和字段以及 DIM ... AS STRING 数组的所有元素初始化为空字符串 (/vo2[+|-])

语法

-vo2[+ | -]

参数

+ | - 指定 + 或 -vo2,会指示编译器将 STRING 类型的所有变量和字段以及 DIM ... AS STRING 数组的所有元素初始化为空字符串 (String.Empty)。

备注

这个选项默认是关闭的,所有类型为 STRING 的局部变量、全局变量、字段和数组元素都具有一个初始值 NULL,这是包含引用类型的任何局部变量、全局变量、字段或数组元素的默认初始值。

 

通常在使用字符串变量之前,您会将其初始化为特定值,将其初始化为空字符串会产生不必要的开销。此外,这与所有其他引用类型的行为不一致,它们的初始值为 NULL。但是,这可能会破坏依赖于将字符串变量初始化为零长度字符串的 Visual Objects 代码。

 

当未使用此选项时,您可以通过将其与 NULL 进行比较来测试空字符串变量、字段或数组元素。当启用此选项时,您可以通过将其与""或String.Empty进行比较,或测试其长度是否等于零来测试空字符串变量、字段或数组元素。System.String.IsNullOrEmpty() 也可用于测试字符串变量是否包含NULL或有效的零长度字符串。

 

还请注意,预定义常量 NULL_STRING 通常等同于 NULL,但在使用 -vo2 时,NULL_STRING等同于""(零长度字符串)。

 

兼容性说明:

-vo2 不会初始化结构中的 STRING 字段。由于结构没有默认构造函数,结构字段不能具有初始化表达式。尽管这不是一个兼容性问题,因为您不能在 Visual Objects 中创建结构(值类型),但如果您在使用 -vo2 的应用程序中使用结构,这是需要牢记的。

 

请注意,这里使用的术语 “structure” 指的是 X# 中的 STRUCTURE,而不是 Visual Objects 中的 STRUCTURE,后者在 X# 中已更名为 VOSTRUCT。-vo2 对 VOSTRUCT 没有影响,因为您不能在 VOSTRUCT 中声明引用类型的字段。

 

要在 Visual Studio 开发环境中设置该编译器选项,请执行以下操作

 

1.打开项目的 "属性"页面

2.点击 Dialect 选项卡

3.更改值

4.查看属性页

示例

// 使用默认或 /vo2-
FUNCTION Start() AS VOID
  LOCAL s AS STRING
  ? s == NULL               // true
  ? s == ""                 // false
  ? s == String.Empty       // false
  ? Len(a)                 // 运行时错误 - NullReferenceException
  ? a:Length               // 运行时错误 - NullReferenceException
  ? String.IsNullOrEmpty(a) // true
  RETURN

// 使用 /vo2 或 /vo2+
FUNCTION Start() AS VOID
  LOCAL s AS STRING         // 编译为 "LOCAL s := "" AS STRING
  ? s == NULL               // false
  ? s == ""                 // true
  ? s == String.Empty       // true
  ? Len(a)                 // 0
  ? a:Length               // 0
  ? String.IsNullOrEmpty(a) // true
RETURN