【发布时间】:2013-09-16 15:06:08
【问题描述】:
我每天都使用 Javascript 和 C#,有时在使用 Javascript 时我不得不考虑提升。但是,C# 似乎没有实现提升(我知道),我不知道为什么。它更像是一种设计选择,还是更类似于适用于所有静态类型语言的安全或语言约束?
为了记录,我并不是说我希望它存在于 C# 中。我只是想了解为什么没有。
编辑:我在 LINQ 查询之后声明变量时注意到了这个问题,但是 LINQ 查询被推迟到变量声明之后。
var results = From c In db.LoanPricingNoFee Where c.LoanTerm == LoanTerm
&& c.LoanAdvance <= UpperLimit Select c
Order By c.LoanInstalment Ascending;
Int LoanTerm = 12;
抛出错误,而:
int LoanTerm = 12;
var results = From c In db.LoanPricingNoFee Where c.LoanTerm == LoanTerm
&& c.LoanAdvance <= UpperLimit Select c
Order By c.LoanInstalment Ascending;
没有。
【问题讨论】:
-
这样做有什么好处?它将如何处理块级范围?
-
我在 LINQ 查询之后声明变量时注意到了这个问题,但是 LINQ 查询被推迟到变量声明之后。
-
您的代码示例是 Visual Basic 而不是 C#,如果我没记错的话,如果使用了尚未声明的名称,它将自动声明一个变量。您发布的第一个代码无法在 C# 下编译。
-
抱歉,这是 VB.NET。但是上面的不编译,下面的可以编译,和C#一样。
-
如果那个类中有一个叫
LoanTerm的字段,而且C#也支持提升呢?你期望什么输出? scope 的概念也必须更改以匹配 Javascript,以提供任何合理的行为。
标签: c# javascript hoisting