Live Chat Icon For mobile
Live Chat Icon
Popular Categories.NET  (151).NET Core  (25)Angular  (49)ASP.NET  (48)ASP.NET Core  (64)ASP.NET MVC  (86)Azure  (28)Blazor  (97)DocIO  (20)Essential JS 2  (71)Essential Studio  (163)File Formats  (20)Flutter  (111)JavaScript  (148)Microsoft  (101)PDF  (59)React  (33)Succinctly series  (122)Syncfusion  (480)TypeScript  (30)Uno Platform  (3)UWP  (4)Vue  (26)Webinar  (25)Windows Forms  (55)WinUI  (21)WPF  (122)Xamarin  (130)XlsIO  (24)Other CategoriesBarcode  (4)BI  (29)Bold BI  (3)Build conference  (6)Business intelligence  (53)Button  (4)C#  (107)Chart  (51)Cloud  (9)Company  (445)Dashboard  (6)Data Science  (3)Data Validation  (5)DataGrid  (47)Development  (257)Doc  (7)DockingManager  (1)eBook  (93)Enterprise  (22)Entity Framework  (5)Essential Tools  (14)Excel  (20)Extensions  (13)File Manager  (4)Gantt  (9)Gauge  (7)Git  (4)Grid  (27)HTML  (9)Installer  (2)Knockout  (2)LINQPad  (1)Linux  (2)M-Commerce  (1)Metro Studio  (11)Mobile  (227)Mobile MVC  (9)OLAP server  (1)Open source  (1)Orubase  (12)Partners  (21)PDF viewer  (23)Performance  (6)PHP  (1)PivotGrid  (4)Predictive Analytics  (6)Report Server  (3)Reporting  (10)Reporting / Back Office  (11)Rich Text Editor  (6)Road Map  (9)Scheduler  (26)SfDataGrid  (9)Silverlight  (21)Sneak Peek  (19)Solution Services  (2)Spreadsheet  (9)SQL  (7)Stock Chart  (1)Surface  (4)Tablets  (5)Theme  (11)Tips and Tricks  (60)UI  (131)Uncategorized  (68)Unix  (2)User interface  (68)Visual State Manager  (1)Visual Studio  (19)Visual Studio Code  (11)Web  (215)What's new  (140)Windows 8  (19)Windows App  (1)Windows Phone  (15)Windows Phone 7  (9)WinRT  (26)
Share on twitter
Share on facebook
Share on linkedin
4 Features I Like in C# 9.0

4 Features Every Developer Must Know in C# 9.0

C# is already a language for developers. Still, Microsoft is making every effort to improve the experience for programmers when using C#. In the release of .NET 5.0, not only were frameworks unified, Microsoft also rolled out C# 9.0 with some groundbreaking new features.

The following are the features that most impressed me in this version:

In this blog, I will discuss each of them.

Init-only setters

Previously, instantiating objects with immutable data had to be done in the constructor by passing values as parameters. Now, it has been simplified to use the syntax init. It initailizes the immutable data during object creation which allows developers to create immutable properties.

Refer to the following code examples.

Usual format:

class Customers
{
    public int CustomerId { get; }
    public string CustomerName { get; set; }

    public Customers(int customerId)
    {
        CustomerId = customerId;
    }

    static void Main(string[] args)
    {
        var customers = new Customers(1045)
        {
            CustomerName = "Tyson"
        };

        //customerid cannot be set as the property is immutable.
        customers.CustomerId = 1099;
    }
}

Using init-only setters:

class Customers
{
    public int CustomerId { get; init; }
    public string CustomerName { get; set; }

    static void Main(string[] args)
    {
        var customers = new Customers()
        {
            CustomerId = 1045,
            CustomerName = "Tyson"
        };

        //customerid cannot be set as the property is immutable.
        customers.CustomerId = 1099;
    }
}

Records

Records allow us to handle an object like a value rather than a collection of properties.  As the records mostly deal with immutable state, they are flexible and also best used for data, rather than functionalities.

In the following example, I have used a with expression to create a new record that inherits values from another record.

Usual format:

class SalesOrder
{
    public int OrderId { get; init; }
    public string ProductName { get; init; }
    public int Quantity { get; init; }

    static void Main(string[] args)
    {
        SalesOrder order = new SalesOrder { OrderId = 1, ProductName = "Mobile", Quantity = 2 };

        //now we need to change "ProductName"
        SalesOrder newOrder = new SalesOrder { OrderId = order.OrderId, ProductName = "Laptop", Quantity = order.Quantity };
    }
}

Using records:

public record SalesOrder
{
    public int OrderId { get; init; }
    public string ProductName { get; init; }
    public int Quantity { get; init; }

    static void Main(string[] args)
    {
        SalesOrder order = new SalesOrder { OrderId = 1, ProductName = "Mobile", Quantity = 2 };

        //using with expression
        SalesOrder newOrder = order with { ProductName = "Laptop" };
    }
}

Top-level statements

This feature helps software developers exclude unwanted code from a program. Top-level statements can replace all the boilerplate code (repeating code) with a single line.

Refer to the following code examples.

Usual format:

using System;

namespace CSharp9
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Welcome to Syncfusion!");
        }
    }
}

Using top-level statements:

using System;

Console.WriteLine("Welcome to Syncfusion!");

To be more precise, we can use:

System.Console.WriteLine("Welcome to Syncfusion!");

Pattern matching

If you’re a regular user of C#, you might know that pattern matching is one of the features introduced in C# 7.0. It helps us extract information from a value. C# 9.0 contains many new patterns, but here we are going to discuss relational and logical patterns.

Relational patterns

These patterns work with relational operators such as <, <=, >, and >=.

Logical patterns

These patterns work with logical operators like and, or, and not.

Refer to the following code example.

public class SalesOrder
{
    public int OrderId { get; set; }
    public string ProductName { get; set; }
    public int Quantity { get; set; }
    public int TotalCost { get; set; }

    public double GetTotalCost() => TotalCost switch
    {
        500 or 600  => 10,
        < 1000 => 10 * 1.5,
        <= 10000 => 10 * 3,
        _ => 10 * 5
    };
}

class CSharpFeatures
{
    static void Main(string[] args)
    {
        SalesOrder newOrderforCustomer1 = new SalesOrder() { OrderId = 1, ProductName = "Camera", Quantity = 1, TotalCost = 5000 };
        newOrderforCustomer1.GetTotalCost();
        SalesOrder newOrderforCustomer2 = new SalesOrder() { OrderId = 2, ProductName = "Pen", Quantity = 1, TotalCost = 500 };
        newOrderforCustomer2.GetTotalCost();
    }
}

Conclusion

With these features, C# 9.0 helps programmers easily work with data (records), shape code (pattern matching), and reduce code (top-level statements). If you want to know more about the new features in the C# 9.0 official release, please read this documentation.

If you have any concerns or need any clarification, please mention them in the comments section below. You can also reach us through our support forumsDirect-Trac, or feedback portal.

If you like this blog post, we think you’ll like the following articles too:

Tags:

Share this post:

Share on twitter
Share on facebook
Share on linkedin
Popular Now

Be the first to get updates

Subscribe RSS feed
Scroll To Top