Questions tagged [c#-7.0]

The version of C#, released in 2017 that added value tuples, local functions, basic pattern matching, ref locals and returns, async main, and various other new features. In most cases you should also specify the c# tag.

c#-7.0
Filter by
Sorted by
Tagged with
590 votes
3 answers
170k views

What is the difference between "x is null" and "x == null"?

In C# 7, we can use if (x is null) return; instead of if (x == null) return; Are there any advantages to using the new way (former example) over the old way? Are the semantics any different? Is it ...
Maniero's user avatar
  • 10.6k
431 votes
10 answers
144k views

Predefined type 'System.ValueTuple´2´ is not defined or imported

I've installed Visual Studio 15 Preview 3 and tried to use the new tuple feature static void Main(string[] args) { var x = DoSomething(); Console.WriteLine(x.x); } static (int x, int y) ...
gsharp's user avatar
  • 28k
233 votes
5 answers
39k views

Local function vs Lambda C# 7.0

I am looking at the new implementations in C# 7.0 and I find it interesting that they have implemented local functions but I cannot imagine a scenario where a local function would be preferred over a ...
Sid's user avatar
  • 14.6k
188 votes
6 answers
66k views

What's the difference between System.ValueTuple and System.Tuple?

I decompiled some C# 7 libraries and saw ValueTuple generics being used. What are ValueTuples and why not Tuple instead? https://learn.microsoft.com/en-gb/dotnet/api/system.tuple https://learn....
Steve Fan's user avatar
  • 3,167
155 votes
2 answers
81k views

How to use C# 7 with Visual Studio 2015?

Visual Studio 2017 (15.x) supports C# 7, but what about Visual Studio 2015 (14.x)? How can I use C# 7 with it?
Luis Teijon's user avatar
  • 4,849
123 votes
2 answers
25k views

In C# can you define an alias to a value tuple with names?

I know it's possible to define aliases in C# with the using keyword. e.g. using ResponseKey = System.ValueTuple<System.Guid, string, string>; However, is it possible to define one using the ...
Nick Randell's user avatar
113 votes
4 answers
35k views

Unable to return Tuple from a method using Visual Studio 2017 and C# 7.0

I've installed Visual Studio 2017 Community that was released a week ago, and I started exploring the new features of C# 7. So I created a simple method that returns two values: public class Program ...
Zein Makki's user avatar
  • 29.7k
107 votes
2 answers
5k views

Odd return syntax statement

I know this may sound strange but I don't know even how to search this syntax in internet and also I am not sure what exactly means. So I've watched over some MoreLINQ code and then I noticed this ...
kuskmen's user avatar
  • 3,728
106 votes
3 answers
49k views

TryParse with out var param

A new feature in C# 6.0 allows to declare variable inside TryParse method. I have some code: string s = "Hello"; if (int.TryParse(s, out var result)) { } But I receive compile errors: What I am ...
Anton23's user avatar
  • 2,109
105 votes
22 answers
138k views

Could not load file or assembly 'System.ValueTuple'

I've got a VS2017 project that compiles to a DLL which is then called by an EXE written by someone else. Both projects target .Net Framework 4.6.2. I rewrote one of my DLL methods to return a tuple ...
Mike Lowery's user avatar
  • 2,708
101 votes
11 answers
47k views

When to use: Tuple vs Class in C# 7.0

Before Tuples, I used to create a class and its variables, then create object from this class and make that object the return type for some functions. Now, with tuples, I can do the same thing, and in ...
Madonna Remon's user avatar
98 votes
10 answers
46k views

Does C# 7 have array/enumerable destructuring?

In JavaScript ES6, you are able to destructure arrays like this: const [a,b,...rest] = someArray; where a is the first element in the array, b is the second, and rest is an array with the remaining ...
kmc059000's user avatar
  • 2,977
97 votes
4 answers
29k views

C# 7 tuples and lambdas

With new c# 7 tuple syntax, is it possible to specify a lambda with a tuple as parameter and use unpacked values inside the lambda? Example: var list = new List<(int,int)>(); normal way to ...
Rast's user avatar
  • 2,501
95 votes
6 answers
49k views

C#7: Underscore ( _ ) & Star ( * ) in Out variable

I was reading about new out variable features in C#7 here. I have two questions: It says We allow "discards" as out parameters as well, in the form of a _, to let you ignore out parameters you don’...
Nikhil Agrawal's user avatar
92 votes
3 answers
4k views

switch with var/null strange behavior

Given the following code: string someString = null; switch (someString) { case string s: Console.WriteLine("string s"); break; case var o: Console.WriteLine("var o"); ...
budi's user avatar
  • 6,431
90 votes
3 answers
36k views

Deconstruction in foreach over Dictionary

Is it possible in C#7 to use deconstruction in a foreach-loop over a Dictionary? Something like this: var dic = new Dictionary<string, int>{ ["Bob"] = 32, ["Alice"] = 17 }; foreach (var (name, ...
gartenriese's user avatar
  • 4,261
80 votes
3 answers
121k views

How to return multiple values in C# 7? [closed]

Is it is possible to return multiple values from a method natively?
Coder Newbie's user avatar
80 votes
10 answers
38k views

How to null check c# 7 tuple in LINQ query?

Given: class Program { private static readonly List<(int a, int b, int c)> Map = new List<(int a, int b, int c)>() { (1, 1, 2), (1, 2, 3), (2, 2, 4) }; ...
Kritner's user avatar
  • 13.7k
69 votes
2 answers
45k views

Does C# 7.0 work for .NET 4.5?

I created a project in Visual Studio 2017 RC to check whether I can use new C# 7.0 language features in a .NET Framework 4.5 project. It seems to me that after referencing System.ValueTuple NuGet, new ...
Lukáš Lánský's user avatar
66 votes
7 answers
37k views

Discard feature significance in C# 7.0?

While going through new C# 7.0 features, I stuck up with discard feature. It says: Discards are local variables which you can assign but cannot read from. i.e. they are “write-only” local variables. ...
rahulaga-msft's user avatar
60 votes
6 answers
32k views

Enabling c# 7 in a asp.net application

I just started working on my old solution in Visual Studio 2017. Just opening the solution in the old IDE worked seamlessly. The c# application projects now default to the c# 7.0 compiler. The ...
davidthegrey's user avatar
  • 1,355
58 votes
6 answers
33k views

In C# 7 is it possible to deconstruct tuples as method arguments

For example I have private void test(Action<ValueTuple<string, int>> fn) { fn(("hello", 10)); } test(t => { var (s, i) = t; Console.WriteLine(s); Console.WriteLine(i)...
bradgonesurfing's user avatar
58 votes
3 answers
31k views

How can I enable all features of C# 7 in Visual Studio 2017 project?

After Visual Studio 2017 was released I wanted to try to create simple console project with new C# 7 features. I expected that I simply download new Visual Studio 2017, then create new console project ...
chromigo's user avatar
  • 1,134
54 votes
3 answers
23k views

Inline variable declaration not compiling

I've been getting a message in Visual Studio 2017, specifically, IDE0018 Variable declaration can be inlined. So I try using an inline variable declaration the way it's mentioned in the visual studio ...
prudan's user avatar
  • 1,081
51 votes
3 answers
11k views

Getting "Tuple element name is inferred. Please use language version 7.1 or greater to access an element by its inferred name."

We have the following code that has been working fine in our UWP app until today after we updated Visual Studio 2017 to the latest 15.3. private void Test() { var groups = new List<(Guid key, ...
Jessica's user avatar
  • 2,067
50 votes
2 answers
17k views

C# 7 .NET / CLR / Visual Studio version requirements

What are the minimum .NET framework and CLR version requirements for running C# 7? Also, do I need VS 2017 to compile C# 7?
ilias's user avatar
  • 2,632
49 votes
1 answer
24k views

C#7 tuple & async

Old format: private async Task<Tuple<SomeArray[], AnotherArray[], decimal>> GetInvoiceDetailAsync(InvoiceHead invoiceHead) { ... } How can you do that in C#7 with new tuples ...
Oszkar's user avatar
  • 1,643
43 votes
4 answers
47k views

How to create a List of ValueTuple?

Is it possible to create a list of ValueTuple in C# 7? like this: List<(int example, string descrpt)> Method() { return Something; }
ArthNRick's user avatar
  • 925
41 votes
2 answers
17k views

C# 7.0 Value Tuple compile error?

When I am trying to compile the following code: var post = iPostService.GetAll().Select(x => (x.Title, x.Author)); I get the compiler error: 'An expression tree may not contain a tuple literal.' ...
Tan Sang's user avatar
  • 1,947
41 votes
2 answers
6k views

Local Functions in C# - to capture or not to capture when passing parameters down?

When using Local Functions in C# 7 you have two options when you want to pass parameters (or other local variables) from the main method down to the local function: You can either explicitly declare ...
Dan Diplo's user avatar
  • 25.2k
40 votes
3 answers
8k views

ValueTuple naming conventions

When naming a ValueTuple element, should they be capitalized or not? (string Name, int Index) rec; or (string name, int index) rec; EDIT: It seems the convention is PascalCase See: https://github....
kofifus's user avatar
  • 18.2k
39 votes
5 answers
34k views

Convert anonymous type to new C# 7 tuple type

The new version of C# is there, with the useful new feature Tuple Types: public IQueryable<T> Query<T>(); public (int id, string name) GetSomeInfo() { var obj = Query<SomeType>(...
lmcarreiro's user avatar
  • 5,572
39 votes
3 answers
19k views

Expression of type T cannot be handled by a pattern of type X

I have upgraded my project to target C# 7 and used Visual Studio 2017 RC to implement pattern matching across my solution. After doing this some errors were introduced relating to pattern matching ...
Alex Wiese's user avatar
  • 8,220
38 votes
1 answer
5k views

C# 7 local function not working as expected and no errors being displayed

I have an Asp.Net MVC App running with framework version .NET 4.5 and I'm using VS2017 pro version. Users can upload attachments including but not limited to: Excel Word PowerPoint pdf jpeg png So ...
Izzy's user avatar
  • 6,810
37 votes
3 answers
5k views

What is the idiomatic naming convention for local functions in C# 7 [closed]

Normal class methods, whether instance or static, have an idiomatic naming convention with regards to their casing. It's not clear that there is a convention for local functions, introduced in C# 7. ...
Joseph Daigle's user avatar
36 votes
1 answer
6k views

In C#7, how can I "roll my own" Task-like type to use with async?

One of the less-talked-about features of C#7 is "generalized async return types", which is described by Microsoft as: Returning a Task object from async methods can introduce performance bottlenecks ...
JamesFaix's user avatar
  • 8,328
35 votes
1 answer
13k views

C# 7 Expression Bodied Constructors

In C# 7, how do I write an Expression Bodied Constructor like this using 2 parameters. public Person(string name, int age) { Name = name; Age = age; }
myfunnyfella's user avatar
  • 1,427
35 votes
2 answers
46k views

Return multiple values from a C# asynchronous method

I have worked with asynchronous methods and the methods which return multiple values, separately. In this specific situation, following "GetTaskTypeAndId()" method should be asynchronous and should ...
Kushan Randima's user avatar
35 votes
4 answers
8k views

Why does pattern matching on a nullable result in syntax errors?

I like to use pattern-matching on a nullable int i.e. int?: int t = 42; object tobj = t; if (tobj is int? i) { System.Console.WriteLine($"It is a nullable int of value {i}"); } However, ...
Kasper van den Berg's user avatar
34 votes
4 answers
10k views

C# 7 ValueTuple compile error

I'm using VS2017 RC and my application targets net framework 4.6.1. I have two assemblies referencing System.ValueTuple 4.3 MyProject.Services MyProject.WebApi In MyProject.Services I have a class ...
JuChom's user avatar
  • 5,877
33 votes
2 answers
20k views

Using a C# 7 tuple in an ASP.NET Core Web API Controller

Do you know why this works: public struct UserNameAndPassword { public string username; public string password; } [HttpPost] public IActionResult Create([FromBody]UserNameAndPassword ...
Eric Vaughan's user avatar
33 votes
3 answers
8k views

Does C# 7 allow to deconstruct tuples in linq expressions

I'm trying to deconstruct a tuple inside a Linq expression // somewhere inside another method var result = from word in words let (original, translation) = Convert(word) ...
Random's user avatar
  • 3,917
33 votes
5 answers
21k views

Name ValueTuple properties when creating with new

I know I can name parameters when I create a tuple implicitly like: var me = (age: 21, favoriteFood: "Custard"); Is it possible to name parameters when a tuple is created explicitly? i.e. var me = ...
BanksySan's user avatar
  • 28k
33 votes
2 answers
6k views

C# 7.0 ValueTuples vs Anonymous Types

Looking at the new C# 7.0 ValueTuples, I am wondering if they will completely replace Anonymous Types. I understand that ValueTuples are structs and therefore behave a bit differently than Anonymous ...
Tim Pohlmann's user avatar
  • 4,250
32 votes
2 answers
17k views

Using named tuples in select statements

Is there a nicer way to select a named tuple in C# 7 using a var target variable? I must be doing something wrong in example 1, or misunderstanding something completely. I seem to have to explicitly ...
gmn's user avatar
  • 4,229
31 votes
6 answers
26k views

How to declare a C# Record Type?

I read on a blog that C# 7 will feature record types class studentInfo(string StudentFName, string StudentMName, string StudentLName); However when I tried it, I get these errors CS0116 A ...
Jeremy Thompson's user avatar
31 votes
4 answers
3k views

What's the benefit of var patterns in C#7?

I don't understand the use case of var patterns in C#7. MSDN: A pattern match with the var pattern always succeeds. Its syntax is expr is var varname where the value of expr is always assigned ...
Tim Schmelter's user avatar
29 votes
2 answers
3k views

C# 7 Compiler Error - Pattern Matching

For some reason, M1() causes a compiler error, while M2(), which does the same thing, causes no error. Any idea why? Using false == should be the same as using the not operator, !. Use of ...
Tom Baxter's user avatar
  • 2,146
27 votes
2 answers
7k views

Private methods vs local functions

To my understanding, both local functions and private methods serve merely as implementation details - helpers for public methods. Why would I want to choose one over the other? When using a private ...
Michael Haddad's user avatar
25 votes
7 answers
30k views

Invalid option '7.3' for /langversion; must be ISO-1, ISO-2, Default or an integer in range 1 to 6

I'm using Visual Studio 17 (version 15.8.5), my project targets .NET Framework 4.8 and I've tried setting the C# version to use (via Build tab in the Properties window) C# 7.3 (that's the maximum ...
Hopeless's user avatar
  • 4,543

1
2 3 4 5
11