Questions tagged «c#-7.0»

C#版本于2017年发布,其中添加了值元组,局部函数,基本模式匹配,ref局部与返回,异步main以及各种其他新功能。在大多数情况下,您还应该指定c#标签。

10
未定义或导入预定义类型“ System.ValueTuple´2”
我已经安装了Visual Studio 15 Preview 3,并尝试使用新的元组功能 static void Main(string[] args) { var x = DoSomething(); Console.WriteLine(x.x); } static (int x, int y) DoSomething() { return (1, 2); } 编译时出现错误: 未定义或导入预定义类型“ System.ValueTuple´2” 根据博客文章,此功能默认情况下应处于“启用”状态。 我做错什么了?

2
“ x为空”和“ x ==空”有什么区别?
在C#7中,我们可以使用 if (x is null) return; 代替 if (x == null) return; 与旧方法相比,使用新方法(以前的示例)有什么优势? 语义有什么不同吗? 只是一个品味问题?如果没有,我什么时候应该使用另一个? 参考:C#7.0的新增功能。

1
局部函数与Lambda C#7.0
我正在看C#7.0中的新实现,我发现它们实现了本地函数很有趣,但是我无法想象这样一种情况:本地函数比lambda表达式更可取,两者之间有什么区别。 我确实知道lambda是anonymous函数,而局部函数不是,但是我无法弄清楚实际情况,其中local函数比lambda表达式有优势 任何示例将不胜感激。谢谢。
178 c#  function  lambda  c#-7.0 



2
奇数返回语法语句
我知道这听起来很奇怪,但我什至不知道如何在互联网上搜索此语法,而且我也不知道这到底意味着什么。 所以我看了一些MoreLINQ代码,然后我注意到了这种方法 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; …
106 c#  .net  c#-7.0 

4
无法从使用Visual Studio 2017和C#7.0的方法返回元组
我已经安装了一周前发布的Visual Studio 2017社区,并且我开始探索C#7的新功能。 因此,我创建了一个简单的方法,该方法返回两个值: public class Program { public static void Main(string[] args) { (int sum, int count) a = ReturnTwoValues(); } static (int sum, int count) ReturnTwoValues() => (1, 1); } 编译器正在生成错误: 错误CS8137无法定义利用元组的类或成员,因为找不到编译器所需的类型'System.Runtime.CompilerServices.TupleElementNamesAttribute'。您是否缺少参考? 我试图在框架中找到一个使用该名称的引用,但是没有运气! 如果我们需要其他东西来使用C#7.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 

2
在C#中,您可以为具有名称的值元组定义别名吗?
我知道可以使用using关键字在C#中定义别名。 例如 using ResponseKey = System.ValueTuple<System.Guid, string, string>; 但是,是否可以对值元组使用新语法来定义一个? using ResponseKey = (Guid venueId, string contentId, string answer); 此语法似乎不起作用。应该是?
92 c#  c#-7.0 

3
用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; } 为什么switch语句匹配case var o? 我的理解是case string s不匹配的,s == null因为(有效)(null as string) != null评估为假。VS Code上的IntelliSense告诉我这o也是一个string。有什么想法吗? 类似于:使用空检查的C#7切换大小写

6
C#7:在Out变量中使用下划线(_)和星号(*)
我在这里阅读有关C#7中新的可变功能的信息。我有两个问题: 它说 我们还允许以“”形式将“丢弃”作为输出参数_,以使您忽略不需要的参数: p.GetCoordinates(out var x, out _); // I only care about x 问:我想这只是C#7的一个信息而不是一项新功能,因为我们也可以在C#7.0之前的版本中这样做: var _; if (Int.TryParse(str, out _)) ... 还是我在这里想念东西? 当我在同一博客中提到时,我的代码给出了一个错误: ~Person() => names.TryRemove(id, out *); *不是有效的标识符。我猜是Mads Torgersen的疏忽吗?
79 c#  c#-7.0 

9
何时使用:Tuple与Class C#7.0
在Tuples之前,我曾经创建过一个class及其变量,然后从此类创建对象,并使该对象成为某些函数的返回类型。 现在用的元组,我可以做同样的在C#7.0,我们可以为元组的属性分配可以理解的名称(在此之前它item1,item2等..) 所以现在我想知道,什么时候应该使用它,什么时候应该在c#7.0中创建一个类?
76 c#  tuples  c#-7.0  valuetuple 

4
C#7元组和Lambda
使用新的C#7元组语法,是否可以指定一个以元组为参数的lambda并在lambda中使用解压缩的值? 例: var list = new List<(int,int)>(); 在lambda中使用元组的正常方法: list.Select(value => value.Item1*2 + value.Item2/2); 我希望避免使用新糖.Item1 .Item2,例如: list.Select((x,y) => x*2 + y/2); 最后一行不起作用,因为它被视为lambda的两个参数。我不确定是否真的有办法。 编辑: 我在lambda定义((x,y)) => ...中尝试了双括号,但没有用:,也许尝试起来很愚蠢,但是双括号实际上在这里起作用: list.Add((1,2)); 另外,我的问题不是要避免使用丑陋的默认名称.Item .Item2,而是要在lambda中实际拆开元组(以及为什么不能实现或不可能)。如果您是来这里使用默认名称的解决方案,请阅读Sergey Berezovskiy的答案。 编辑2: 只是想到了一个更通用的用例:是否有可能(或为什么不这样做)“解构”传递给方法的元组?像这样: void Foo((int,int)(x,y)) { x+y; } 代替这个: void Foo((int x,int y) value) { value.x+value.y }
75 c#  lambda  tuples  c#-7.0 

3
如何在C#7中返回多个值?[关闭]
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加详细信息并通过编辑此帖子来澄清问题。 3年前关闭。 改善这个问题 是否可以从一个方法本地返回多个值?
72 c#  .net  c#-7.0 

2
C#7.0是否适用于.NET 4.5?
我在Visual Studio 2017 RC中创建了一个项目,以检查是否可以在.NET Framework 4.5项目中使用新的C#7.0语言功能。在我看来,引用System.ValueTupleNuGet之后,新的元组运行良好。还有什么我应该考虑的,还是行得通的? 检查System.ValueTupleNuGet依赖项后,看起来好像不支持.NET Framework 4.0。是这种情况,还是有某种方法可以使新语言在此运行时中运行?
69 c#  .net-4.0  .net-4.5  c#-7.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.