Tag: c# 7.0

C#7本地函数不能按预期方式工作,也不会显示错误

我有一个Asp.Net MVC应用程序与框架版本.NET 4.5运行,我正在使用VS2017专业版。 用户可以上传附件,包括但不限于: 高强 字 幻灯片 PDF格式 JPEG PNG 所以我有一个privatefunction,如下所示: private string ImageExtension(string path) { string noImagePath = HttpContext.Current.Server.MapPath("~/Contenthttp://img.dovov.comTemplate/No-Image-Available-100×100.jpg"); string fileExtension = System.IO.Path.GetExtension(path); switch (fileExtension) { case ".jpg": case ".jpeg": case ".gif": case ".png": return path; default: return noImagePath; } } 正如你所看到的那样,这很简单,不会做任何事情。 由于我只是在一个地方使用这个地方,我想到了使用本地函数的新C#7function。 所以我已经提前创build了我的主函数,并在其中添加了ImageExtension(string path) 。 public void BugInfo(HttpPostedFileBase file) { if(file != null […]

不能select.NET 4.7

我正在尝试使用.NET 4.7开始一个新项目。 我安装了Creators Update以及Visual Studio 2017的最新版本。当我启动一个项目和设备来select.NET版本时,我最新的.NET Framework版本是4.6.2。 当我去下载一个新的.NET框架,它只列出4.6.2作为最新的通过MS,你可以下载。 它说.NET 4.7包含在VS 2017中。我错过了什么?

如何在Visual Studio 2017项目中启用C#7的所有function?

Visual Studio 2017发布之后,我想尝试使用新的C#7function创build简单的控制台项目。 我期望我只需下载新的Visual Studio 2017,然后创build新的控制台项目,并可以使用新的C#7function。 但我不能。 我可以使用一些function,如Tuples,如果我安装NuGet包System.ValueTuple 。 但对于其他function,我不知道我需要做什么。 例如这个NuGet问题 。 我现在需要做所有这些肮脏的安装吗? 或者我可以以更简单的方式启用c#7function?

无法从使用Visual Studio 2017和C#7.0的方法返回Tuple

我已经安装了一周前发布的Visual Studio 2017社区,并且开始探索C#7的新function。 所以我创build了一个返回两个值的简单方法: class Program { static void Main(string[] args) { (int sum, int count) a = ReturnTwoValues(); } static (int sum, int count) ReturnTwoValues() => (1, 1); } 编译器生成一个错误: 错误CS8137无法定义使用元组的类或成员,因为无法find编译器所需的types“System.Runtime.CompilerServices.TupleElementNamesAttribute”。 你错过了一个参考吗? 我尝试在这个名字的框架中find一个引用,但没有运气! 如果我们需要额外的东西来使用C#7.0的function,那么我们需要为每个项目做到这一点是非常奇怪的!

“x is null”和“x == null”有什么区别?

在C#7中我们可以使用 if (x is null) return; 代替 if (x == null) return; 使用新的方法(前面的例子)比旧的语法有什么优点吗? 语义有什么不同? 只是一个品味的问题? 如果不是,何时使用这个或另一个。 参考 。

System.ValueTuple和System.Tuple有什么区别?

我反编译了一些C#7库,并使用了ValueTuplegenerics。 什么是ValueTuples ,为什么不是Tuple呢?

本地函数与Lambda C#7.0

我期待在C#7.0中的新实现,我发现有趣的是,他们已经实现了本地函数,但我无法想象一个局部函数将优于lambdaexpression式,两者之间有什么区别。 我明白lambdas是anonymous函数,而本地函数不是,但我不能找出一个真实世界的场景,其中本地函数比lambdaexpression式有优势 任何例子将不胜感激。 谢谢。

TryParse与出var参数

C#6.0中的新特性允许在TryParse方法中声明variables。 我有一些代码: string s = "Hello"; if (int.TryParse(s, out var result)) { } 但是我收到编译错误: 我做错了什么? PS:在项目设置中设置C#6.0和.NET框架4.6。

用var / null开关奇怪的行为

给出以下代码: string someString = null; switch (someString) { case string s: Console.WriteLine("string s"); break; case var o: Console.WriteLine("var o"); break; default: Console.WriteLine("default"); break; } 为什么在case var o上匹配switch语句? 这是我的理解, case string s不匹配时, s == null因为(有效) (null as string) != null计算结果为false。 对VS Code的智能感知告诉我, o也是一个string 。 有什么想法吗? 熟悉到: C#7切换案件与空检查

奇数返回语法语句

我知道这可能听起来很奇怪,但我不知道如何在互联网上search这个语法,也不知道究竟是什么意思。 所以我看了一些更多的LINQ代码,然后我注意到了这个方法 public static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, IEqualityComparer<TKey> comparer) { if (source == null) throw new ArgumentNullException(nameof(source)); if (keySelector == null) throw new ArgumentNullException(nameof(keySelector)); return _(); IEnumerable<TSource> _() { var knownKeys = new HashSet<TKey>(comparer); foreach (var element in source) { if (knownKeys.Add(keySelector(element))) yield return element; } } } 什么是这个奇怪的回报声明? return […]