为什么编译没有错误的空任务

时间:2013-01-02 11:45:02

标签: c# asp.net .net asp.net-4.0 compiler-bug

这是我的代码:

var country = BLLocations.Instance.GetCountries();
ddlCountry.DataSource = 
ddlCountry.DataTextField = "Country";
ddlCountry.DataValueField = "CountryCode";
ddlCountry.DataBind();

见第二行:

ddlCountry.DataSource = 

它成功编译并发布到云端。奇怪!

3 个答案:

答案 0 :(得分:10)

就是这样:

ddlCountry.DataSource =  ddlCountry.DataTextField = "Country";

换行符不起作用,这是一个有效的代码。

就像:

var x = 2;
var y = 3;
x = y = 1000;

(注意这根本不是好习惯!令人困惑,难以令人厌恶)

C#中的每个代码都返回一个值(虽然该值可以为void),这可以让你进行延迟加载:

return x ?? x = new ExpensiveObject();//

它的作用:

  1. 如果x不为null,则返回x。
  2. 如果x为null,则指定x new ExpensiveObject()并返回赋值 - x。
  3. 有用的功能,但要小心。

答案 1 :(得分:2)

这是可以接受的,就像你可以拥有:

a = b = c;

我很惊讶因为类型没有警告。 ddlCountry.DataSource和ddlCountry.DataTextField必须是我想的相同类型。

编译器在此实例中忽略空格,因为它在语法上无关紧要。更具体地说,这是由预处理器完成的。

答案 2 :(得分:0)

在C#中,与许多其他语言一样,语句由;字符分隔,不是由新行字符分隔。因此写作:

var someString =


"SomeValue";

完全没问题。

您的代码段与

相同
ddlCountry.DataSource = "Country";
ddlCountry.DataTextField = "Country";