Questions tagged «c#-6.0»

C#6.0与Roslyn(.NET编译器平台)和Visual Studio 2015一起提供。

1
为什么不能在lambda表达式中使用null传播运算符?
我经常在代码中使用null传播运算符,因为它为我提供了更具可读性的代码,尤其是在长查询中,我不必对使用的每个类进行null检查。 以下代码引发了一个编译错误,我们不能在lambda中使用null传播运算符。 var cnt = humans.AsQueryable().Count(a => a.House?[0].Price == 5000); 错误 : 错误CS8072表达式树lambda不能包含空传播运算符。 如果确实无法执行其他任何操作,则C#可以轻松地将以上代码转换为以下代码! var cnt = humans.AsQueryable().Count(a => a.House != null && a.House[0].Price == 5000); 我很好奇,为什么C#什么都不做,只是抛出编译器错误?

1
主要构造函数不再在VS2015中编译
在这一天之前,我可以使用主要的构造函数,例如: public class Test(string text) { private string mText = text; } 为了做到这一点,在以前的Visual Studio CTP中,我必须将其添加到csproj文件中: <LangVersion>Experimental</LangVersion> 无论如何,这在Visual Studio 2015预览版(带有或不带有LangVersion)中不再起作用。有人对可能发生的事情有任何想法吗?

6
只能设置带有getter的自动属性,为什么?
我创建了一个自动属性: public int Foo { get; } 这只是吸气剂。但是当我构建一个构造函数时,我可以更改值: public MyClass(string name) { Foo = 5; } 即使这是仅获得的,为什么有可能呢?
96 c#  c#-6.0 

3
TryParse没有var参数
C#6.0中的一项新功能允许在TryParse方法中声明变量。我有一些代码: string s = "Hello"; if (int.TryParse(s, out var result)) { } 但是我收到编译错误: 我做错了什么?PS:在项目设置中设置了C#6.0和.NET Framework 4.6。
93 c#  c#-6.0  c#-7.0 


9
在捕获块中等待
我有以下代码: WebClient wc = new WebClient(); string result; try { result = await wc.DownloadStringTaskAsync( new Uri( "http://badurl" ) ); } catch { result = await wc.DownloadStringTaskAsync( new Uri( "http://fallbackurl" ) ); } 基本上,我想从一个URL下载,当它失败并出现异常时,我想从另一个URL下载。当然这两个时间都是异步的。但是由于以下原因,代码无法编译 错误CS1985:无法在catch子句的主体中等待 好的,出于任何原因都被禁止,但是这里的正确代码模式是什么? 编辑: 好消息是C#6.0可能会允许catch和finally块中的等待调用。


2
C#6如何使用插值字符串格式化双精度格式?
我已经使用了C#6 incl的一些新功能。内插字符串,以简化用法(显示包含$“ {EmployeeName},{Department}”之类的字符串变量的消息)。 现在,我想使用插值字符串显示格式化的双精度值。 例 var aNumberAsString = aDoubleValue.ToString("0.####"); 如何将其写为插值字符串?类似于$“ {aDoubleValue} ....”

3
Lambda用于财产的获取和设定
在C#6.0中,我可以编写: public int Prop => 777; 但是我想使用getter和setter。有什么办法可以做下一个? public int Prop { get => propVar; set => propVar = value; }
76 c#  c#-6.0 


1
lambda表达式中的枚举的编译方式有所不同;过载分辨率改善的结果?
尝试使用Visual Studio 2015 RC时,我收到了先前工作代码的运行时错误。给定lambda (x => x.CustomerStatusID == CustomerStatuses.Active)作为传递给函数Expression<>,调试器将显示表达式树中的差异。以前它是这样编译的: .Lambda #Lambda1<System.Func`2[Services.DataClasses.CustomerDC,System.Boolean]>(Services.DataClasses.CustomerDC $x) { (System.Int32)$x.CustomerStatusID == 0 } 但是在C#6.0中,它现在编译为 .Lambda #Lambda1<System.Func`2[Services.DataClasses.CustomerDC,System.Boolean]>(Services.DataClasses.CustomerDC $x) { (System.Int32)$x.CustomerStatusID == (System.Int32).Constant<Services.DataClasses.CustomerStatuses>(Active) } 尽管对我的遍历树的代码的修复很简单,并且可以理解其他细节,但是有人知道像这样漂浮的其他陷阱吗? 或者,是否有人链接到有关如何改进重载分辨率的细节的信息?我找不到。
68 c#  lambda  enums  roslyn  c#-6.0 

9
C#6.0字符串插值本地化
C#6.0具有字符串插值-一个很好的功能,用于格式化字符串,例如: var name = "John"; WriteLine($"My name is {name}"); 该示例转换为 var name = "John"; WriteLine(String.Format("My name is {0}", name)); 从本地化的角度来看,最好存储类似以下的字符串: "My name is {name} {middlename} {surname}" 比String.Format表示法: "My name is {0} {1} {2}" 如何使用字符串插值进行.NET本地化?是否有一种将$“ ...”放入资源文件的方法?还是应该像“ ... {name}”那样存储字符串并以某种方式即时插值? PS这个问题不是关于“如何制作string.FormatIt扩展名”(有很多这样的库,SO答案等)。这个问题是关于Roslyn扩展(在“本地化”上下文中用于“字符串插值”)(都是MS .NET词汇中的术语)或动态用法(例如Dylan提出)的问题。
67 c#  .net  c#-6.0 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.