如果我这样做,我得到一个System.StackOverflowException:
private string abc = "";
public string Abc
{
get
{
return Abc; // Note the mistaken capitalization
}
}
Run Code Online (Sandbox Code Playgroud)
我理解为什么 - 属性引用自身,导致无限循环.(在此处和此处查看以前的问题).
我想知道的(以及我之前没有看到的问题)是为什么C#编译器没有抓住这个错误?它检查一些其他类型的循环引用(继承自己的类等),对吗?只是这个错误不常见,值得检查吗?或者是否有一些我没有想到的情况,当你想要一个房产以这种方式实际引用自己的时候?
请考虑以下代码示例:
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 + 2提供"缺失返回值"警告,但不提供3(不提供此类编译器选项).
语言设计者决定在这类类型中省略此功能的"非内在价值类型"有什么特别之处?
(我怀疑这是一个深思熟虑的决定,因为(我假设)为所有值类型实现该功能要比检查一些硬编码的"内在"白名单更容易.)
我一直在做一些代码审查,这段代码对我来说似乎很奇怪,因为它没有任何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)