gpt4 book ai didi

c# - 如何在 VB.NET 中编写 [DefaultValue(null)]? 不编译

转载 作者:太空狗 更新时间:2023-10-29 23:06:46 24 4
gpt4 key购买 nike

这并不像看起来那么微不足道。这是 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com