Tag: c# 6.0

插值字符串中的C#引号意外字符\ 0022

我已经读过你可以在插值字符串中使用表达式,但是转义引号不起作用。 private string sth = $”{String.Join(\”\”, Node.stringToType.Keys)}”; Error CS1056: Unexpected character `\0022′ (CS1056) Error CS1525: Unexpected symbol `)’, expecting `${‘, `:’, or `}’ (CS1525) 更新: 上面的内在表达相当于 String.Join(“”, Node.stringToType.Keys) (两个反斜杠用于转义两个双引号),就像你可以插入任何分隔符一样。

MyEnum.Item.ToString()和nameof(MyEnum.Item)有什么区别?

MyEnum.Item.ToString(); nameof(MyEnum.Item); 哪种款式首选? 两者之间有什么实际区别吗?

在调试器中跳过表达式身体属性

是否有类似的[DebuggerStepThrough]属性可用于C#中的表达式身体属性? 例如,我想跳过代码 public Byte ByteArray => Builder.CreateArray(); [DebuggerStepThrough]无法应用于属性。 C#团队是否在C#6.0中提供任何其他解决方案?

新的C#6.0字符串插值语句不编译

我试图实现这个video中的一些function,但我没有太多运气新的字符串插值语法(我还有其他一切工作,至少在这段代码中)。 我使用的是Visual Studio 2015 CTP6,我已将其配置为使用.NET 4.6并已进入Build选项以确保我指定C#6.0。 我也按照这里的说明进行操作 。 这是我的代码: using System; using static System.Math; namespace NewCsharp6Features { public class C6Point { public int X { get; } public int Y { get; } public double Distance => Sqrt(X * X + Y * Y); public C6Point(int x, int y) { X = x; Y = […]

C#6.0的字符串插值是否依赖于Reflection?

简短而简单。 C#6.0中的新字符串插值是否依赖于reflection? 即 string myStr = $”Hi {name}, how are you?”; 在运行时使用reflection来查找变量“name”及其值?

为什么.NET 4.6特定代码在针对框架的旧版本时编译?

我有一个针对旧版.NET Framework(.NET 4.5.2)的项目。 我安装了Visual Studio 2015(因此我的机器上安装了.NET 4.6)。 我注意到如果我使用.NET 4.6 / C#6中发布的C#语言function,它仍会编译。 如果我的项目的目标框架是<.NET 4.6,那么这不应该编译: public string MyExpressionBodyProperty => “1”; //auto properties are new in C# 6 public string MyAutoProperty { get; } = “1”; private static void MethodThatUsesNameOf(string filename) { if (filename == null) { //nameof was released in C# 6 throw new ArgumentException(“The file does […]

使用Null条件运算符检查可能为null的对象的值

我一直在玩C#6的Null Conditional Operator( 更多信息在这里 )。 我非常喜欢语法,我认为它使代码更具可读性,但我认为当你遇到一个本身可能为null的对象上的属性值时,代码究竟要做什么是值得怀疑的。 例如,如果我有一个带有十进制属性的类,并且我想要对该十进制值进行条件检查,我会写如下: if (foo?.Bar > max) { // do something } 从表面上看,这看起来很棒……如果foo不为null,则获取Bar的值并检查它是否大于最大值,如果是,则执行某些操作。 但是,如果foo为null会怎么样?! 有关C#6的新function和改进function的文档说明了以下内容: 如果实际上对象的值为null,则null条件运算符将返回null。 它将对Bar的调用短路,并立即返回null,避免编程错误,否则会导致NullReferenceException。 我在这里写了一个小提琴,它表明它确实有效,并且正在做我期待它做的事情但是我无法理解它是如何决定条件的结果的。 短路如何等于假 ? 在我的脑海中,这段代码现在要说“如果foo为null,检查null是否> max,这是不可能的,所以返回false”或“如果foo为null,那么foo!= null将返回false,所以你得到一个假“但文档说null条件检查返回null,而不是false。

如果Exceptionfilter的filter抛出exception会发生什么

我还没有在C#6工作但是想知道…. 正如标题所说“如果Exceptionfilter的filter抛出exception会发生什么?”。 我想真正的答案是“filter应该以一种永远不会抛出exception的方式编写。”但是我们可以这样说。 是否exception发生在捕获本身内? try { throw new Exception(“Forced Exception”); } catch (Exception ex) if (MethodThatThrowsAnException()) { WriteLine(“Filtered handler 1”); } catch (Exception ex) { WriteLine(“Filtered handler 2”); } 要么 try { throw new Exception(“Forced Exception”); } catch (Exception ex) if (MethodThatThrowsAnException()) { WriteLine(“Filtered handler 1”); } 编辑:有趣的示例由于示例所基于的涉嫌volatileread的错误,此部分已被删除。 需要进一步调查

如何创建一个静态lambda用于表达式构建?

从C#6开始,lambdas现在默认为实例方法,并且永远不会是静态的(我假设它们现在总是捕获它们,我认为它更有效[考虑到讨论似乎更快])。 请参阅此处: 为什么没有捕获的lambda从C#5中的静态更改为C#6中的实例方法? 在这里: CSC和Roslyn编译器的静态lambda表达式评估的差异? 现在,在创建静态MethodInfos以调用表达式方法(如Expression.Convert(Expression, typeof({SomeType}), conversionMethodInfo);会导致使用lambdas Expression.Convert(Expression, typeof({SomeType}), conversionMethodInfo); 那么,这样做的新方法是什么? 我尝试将“静态”修饰符与lambdas一起使用,但它不起作用。 对于那些无法想象这样的代码的人来说,这可能是一个例子: Func converter = static v => ConvertT1ToT2(v); // (‘T’ is whatever type you want) Expression.Convert(expression, typeof({SomeType}), converter.Method) // (error: converter.Method.IsStatic is false) 是的,显然它不起作用。

为什么IL将此值设置两次?

当我输入这段代码时,我尝试使用Try Roslyn : using System; using System.Linq; using System.Collections.Generic; using Microsoft.CSharp; public class C { public C() { x = 4; } public int x { get; } = 5; } 它给了我这个代码: using System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Security; using System.Security.Permissions; [assembly: AssemblyVersion(“0.0.0.0”)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: […]