Tag: c# 7.0

‘ValueTuple ‘存在于’System.ValueTuple …’和’mscorlib ……’中

B“H 我正在尝试使用C#7的新Tuplefunction,并遇到一些问题。 实际上,他们工作正常,我不确定是什么改变让他们rest。 我正在使用ASP.Net 4 , MVC 5 ,目标.net framework 4.6.1 所以为了使用元组,我不得不使用Nuget Package’System.ValueTuple ‘System.ValueTuple’ 。 没有它,项目将无法编译。 它运作良好一段时间。 然后今天当我加载任何使用元组的页面时,我得到了 编译器错误消息:CS0433:类型’ValueTuple’存在于’System.ValueTuple,Version = 4.0.2.0,Culture = neutral,PublicKeyToken = cc7b13ffcd2ddd51’和’mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089 “ 该项目编译良好,如果我删除System.ValueTuple然后它不编译。 但是当我在网页中运行它时,我得到了这个错误。 我在谷歌上的搜索建议将ValueTuple添加到.net 4.7但我在项目的任何地方都没有引用4.7,而我没有编译4.7。 我的VS 2017甚至没有这个选项。 谢谢

模式匹配字符串

我想知道是否有办法在c#7中做这样的事情 var test = “aaeag”; switch (test) { case test.StartsWith(“a”): break; default: break; } 可悲的是,它看起来不太可能。 这是正确的还是我做错了什么?

C#7使用空检查切换案例

C#7引入了一个名为patterns的新function,您可以将其与Is-Expression或Switch案例一起使用,如下所示: string str = null; switch(str){ case string x: Console.WriteLine(“string ” + x); break; default: Console.WriteLine(“default”); break; } 并且你会期望它会进入#1的情况,因为它是相同的类型,但它没有。

是否可以解构ValueTuple参数?

是否有可能解构一个没有从方法返回的元组,但是是一个out参数? 我不确定我是正确表达自己还是使用正确的术语,所以这里有一些例子: void OutMethod(out (int aNumber, string someText) output) => output = (15, “yo”); void Usage() { { // Works, of course. OutMethod(out var tuple); // But *slightly* aesthetically unappealing to use. var usage = $”{tuple.someText}: {tuple.aNumber}”; } { // Would be awesome, but doesn’t work. OutFunction(out var(number, text)); } { // Would be awesome […]

模式匹配变量范围

在Roslyn模式匹配规范中,它指出: 模式变量的范围如下: 如果模式出现在if语句的条件中,则其作用域是if语句的条件和受控语句,而不是其else子句。 然而,最新的Microsoft“What’s new” post和演示文稿显示了这个例子: public void PrintStars(object o) { if (o is null) return; // constant pattern “null” if (!(o is int i)) return; // type pattern “int i” WriteLine(new string(‘*’, i)); } 其中显示模式匹配i变量在模式匹配的if级别范围之外使用。 这是一个疏忽,还是从规范中改变了范围?

如何创建ValueTuple列表?

是否可以在C#7中创建ValueTuple列表? 像这样: List Method() { return Something; }

获得“元组元素名称的推断。 请使用语言版本7.1或更高版本通过其推断名称访问元素。“

我们将以下代码在我们的UWP应用程序中运行良好,直到今天我们将Visual Studio 2017更新到最新的15.3 。 private void Test() { var groups = new List<(Guid key, IList items)>(); var items = new List { (“a”, true), (“b”, false), (“c”, false) }; var group = (Guid.NewGuid(), items); groups.Add(group); } 输出窗口中没有错误消息 推断元组元素名称’items’。 请使用语言版本7.1或更高版本通过其推断名称访问元素。 知道为什么以及如何解决这个问题?

我应该等待ValueTask 吗?

哪个是ValueTask的有效实现? 缓存服务从缓存或DB返回数据。 public async ValueTask<IList> GetEmployeesFacts() { try { var facts = (List) _memoryCache.Get(“facts”); return facts ?? await _accountService.GetEmploymentFacts(DetailsRequestType.All, null); } catch (Exception e) { var tc = new TelemetryClient(); tc.TrackException(e); return null; } } 这是: var employeesFacts = await _cacheService.GetEmployeesFacts(); 或var employeesFacts = _cacheService.GetEmployeesFacts().Result; 这里有点困惑。

如何创建命名引用类型元组?

以下行创建一个命名的ValueTuple : var tuple = (a:1, b:2, c:3, d:4, e:5, f:6); 值类型无法有效传递。 C#7是否提供了一种创建元Tuple类型的命名元组的方法?

如何在Team Foundation Server 2015中启用C#7版本?

我们在本地安装了Team Foundation Server(TFS)2015。 我们希望使用Visual Studio 2017来利用最新的C#语言function。 我们尚未准备好升级到2017年TFS。在TFS 2015中构建最新C#语言function所需的步骤是什么?