Tag: syntactic sugar

为什么C#静态构造函数需要括号?

考虑: class Foo { static Foo() { // Static initialisation } } 为什么static Foo() {…}需要static Foo() {…} ? 静态构造函数必须始终是无参数的,为什么要这么麻烦? 它们是否有必要避免一些解析器模糊,或者只是为了保持与常规无参数构造函数的一致性? 由于它看起来非常像初始化块,我经常发现自己意外地将它们排除在外,然后不得不考虑几秒钟的错误。 如果他们可以以同样的方式被淘汰将是很好的。

解构赋值 – C#中变量的对象属性

JavaScript有一个很棒的function,您可以使用一条简洁的线条从对象的属性中分配多个变量。 它被称为在ES6中添加的解构赋值语法。 // New object var o = {p1:’foo’, p2:’bar’, p3: ‘baz’}; // Destructure var {p1, p2} = o; // Use the variables… console.log(p1.toUpperCase()); // FOO console.log(p2.toUpperCase()); // BAR 我想用C#做类似的事情。 // New anonymous object var o = new {p1=”foo”, p2=”bar”, p3=”baz”}; // Destructure (wrong syntax as of C#6) var {p1, p2} = o; // Use […]

如何在ExpandoObject中使用集合初始化程序语法?

我注意到新的ExpandoObject实现了IDictionary ,它具有必需的IEnumerable<KeyValuePair>和Add(string, object)方法,所以应该可以使用集合初始化语法来添加expando对象的属性与向字典中添加项目的方式相同。 Dictionary dict = new Dictionary() { { “Hello”, “World” } }; dynamic obj = new ExpandoObject() { { “foo”, “hello” }, { “bar”, 42 }, { “baz”, new object() } }; int value = obj.bar; 但似乎没有办法做到这一点。 错误: ‘System.Dynamic.ExpandoObject’不包含’添加’的定义 我认为这不起作用,因为接口是明确实现的。 但有没有办法解决这个问题? 这工作正常, IDictionary exdict = new ExpandoObject() as IDictionary(); exdict.Add(“foo”, “hello”); exdict.Add(“bar”, 42); […]

到达三元运算符的“另一面”时什么都不做?

注意:我有时会在( a , b , c )之前看到这个问题,但这些问题都不在C#中,也没有帮助。 假设我正在使用? : ? :三元运算符(如果出现false就什么也不做): r==5? r=0 : ; 我收到了一个错误。 把东西放在那里显然可以解决问题。 如果不做一些随机的空函数,我怎么能保持对方空?

在C#中关闭循环变量

从这篇文章中,我被告知下面的代码部分遭受了“关闭循环变量的令人震惊的行为”。 foreach (Canidate canidate in allCanidates) { Thread newThread = new Thread(delegate() { BusyWait(canidate); }); newThread.Start(); } 我把它换成了这个: foreach (Canidate canidate in allCanidates) { var can = canidate; Thread newThread = new Thread(delegate() { BusyWait(can); }); newThread.Start(); } 但是我的老板一直坚称它会遭遇同样的问题。 我使用此链接尝试解决此问题。 有人可以帮我正确解决问题,以便我的代码能够正确执行。 这个问题对我来说都是新的,我不确定我是否完全理解它。

foreach纯粹是“语法糖”吗?

当foreach与数组一起使用时,编译器将foreach循环编译为类似for循环的东西。 当foreach与IEnumerable或IEnumerable一起使用时,编译器会将foreach循环编译为类似while循环的东西。 那么这是否意味着foreach纯粹是syntactic sugar ? 或者有什么复杂的东西吗? CLR是否了解foreach ? 在MSIL代码中是否有专门针对foreach设计的内容?

C#有多大用处? 运营商?

所以我被这个?所吸引。 运营商,但仍然无法使用它。 当我做的事情时,我通常会想到: var x = (someObject as someType).someMember; 如果someObject有效且someMember为null,我可以这样做 var x = (someObject as someType).someMember ?? defaultValue; 但是当someObject为null时,几乎总是遇到问题,而且?? 并没有帮助我使这个更干净,而不是自己做空检查。 你们找到了什么用途? 在实际情况?