相关疑难解决方法(0)

为什么C#编译器不会阻止属性引用自己?

如果我这样做,我得到一个System.StackOverflowException:

private string abc = "";
public string Abc
{
    get
    { 
        return Abc; // Note the mistaken capitalization
    }
}
Run Code Online (Sandbox Code Playgroud)

我理解为什么 - 属性引用自身,导致无限循环.(在此处此处查看以前的问题).

我想知道的(以及我之前没有看到的问题)是为什么C#编译器没有抓住这个错误?它检查一些其他类型的循环引用(继承自己的类等),对吗?只是这个错误不常见,值得检查吗?或者是否有一些我没有想到的情况,当你想要一个房产以这种方式实际引用自己的时候?

c# compiler-construction exception

35
推荐指数
3
解决办法
1814
查看次数

为什么VB.NET的"缺失返回值"警告明确排除了"非内在价值类型"?

请考虑以下代码示例:

Function f1() As Object     ' yields warning BC42353
End Function

Function f2() As Int32      ' yields warning BC42353
End Function

Function f3() As DateTime   ' yields warning BC42353
End Function

Function f4() As Guid       ' no warning
End Function
Run Code Online (Sandbox Code Playgroud)

以及以下项目设置:

项目设置

显然,VB.NET在以下三类类型之间有所不同:

  1. 参考类型[例f1],
  2. "内在"值类型(一些显然未记录的值类型的子类别,请参阅什么是内在值类型?)[示例f2和f3],
  3. "非内在"价值类型[例f4],

并为1 + 2提供"缺失返回值"警告,但不提供3(不提供此类编译器选项).

语言设计者决定在这类类型中省略此功能的"非内在价值类型"有什么特别之处?

(我怀疑这是一个深思熟虑的决定,因为(我假设)为所有值类型实现该功能要比检查一些硬编码的"内在"白名单更容易.)

vb.net language-lawyer roslyn

7
推荐指数
1
解决办法
132
查看次数

在Visual Basic .NET中没有此函数的返回关键字

我一直在做一些代码审查,这段代码对我来说似乎很奇怪,因为它没有任何return语句:

Protected Function AddZero(ByVal vsInput As String) As String
    If Len(vsInput) = 1 Then
        AddZero = "0" & vsInput
    Else
        AddZero = vsInput
    End If
End Function
Run Code Online (Sandbox Code Playgroud)

vb.net

2
推荐指数
1
解决办法
539
查看次数