- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这并不像看起来那么微不足道。这是 this question 的后续行动.
假设我有一个带有属性的 Windows 窗体用户控件:
// using System.ComponentModel;
[DefaultValue(null)]
public object DataSource { … }
如果我把它翻译成 VB.NET,我会试试这个:
'Imports System.ComponentModel
<DefaultValue(Nothing)>
Public Property DataSource As Object
…
End Property
这行不通,因为编译器在选择正确的 overload of DefaultValueAttribute
's constructor 时遇到问题:
Overload resolution failed because no accessible
New
is most specific for these arguments:
Public Sub New(value As Boolean)
: Not most specific.Public Sub New(value As Byte)
: Not most specific.Public Sub New(value As Char)
: Not most specific.
我很确定这是因为 Nothing
在 VB.NET 中不仅表示“空引用”(C# 中的 null
),而且还表示参数类型的“默认值”(C# 中的 default(T)
)。由于这种歧义,每个构造函数重载都是潜在的匹配项。
<DefaultValue(CObj(Nothing))>
也不会工作,因为它不是一个常量值。
我如何在 VB.NET 中编写这个?
附注: <DefaultValue(GetType(Object), Nothing)>
是一个选项,但它规避了这个问题。如果有任何方法可以为 DefaultValueAttribute
使用相同的构造函数,我真的很感兴趣与 C# 版本一样。
最佳答案
"[…] won't work because the compiler has problems choosing the correct overload of
DefaultValueAttribute
's constructor[.]"
编译器可以通过 Nothing
的类型转换得到帮助到所需的类型:
<DefaultValue(DirectCast(Nothing, Object))>
"
<DefaultValue(CObj(Nothing))>
also won't work because it is not a constant value."
幸运的是,不像CObj(Nothing)
, 编译器认为 DirectCast(Nothing, Object)
— 令人惊讶的是,CType(Nothing, Object)
, 也是一个常数值,因此它被接受。
关于c# - 如何在 VB.NET 中编写 [DefaultValue(null)]? <DefaultValue(Nothing)> 不编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29748703/
我是一名优秀的程序员,十分优秀!