Cùng với sự phát triển của .NET 7, Microsoft cũng phát hành C# 11 với những tính năng vượt trội, cải thiện mạnh mẽ về tính năng và hiệu xuất. Trong bài viết này, chúng ta sẽ xem xét các tính năng mới trong C# 11 và làm sao có thể được sử dụng để cải thiện code của bạn.

Cho phép newlines trong interpolated string
var message = $"My name is {name}. I'm from {town}. I'm {age} years old";
Ở đây ta có ký tự $ ở đầu chuỗi báo hiệu nó là một interpolated
string. Bên trong chuỗi, thay vì sử dụng placeholder bạn sẽ viết trực tiếp biểu thức cần thiết
vào đó.
- Verbatim interpolated: $@""
- Non-verbatim interpolated: $""
Một điểm khác biệt chính giữa các chuỗi này là non-verbatim interpolated strings không thể tạo ra newlines, thay vì đó bạn chỉ có thể sử dụng rn để tạo newlines. Trong C#11, nó đã được được cải thiện dễ dàng:
var v = $"Count ist: { this.Is.Really.Something()
.That.I.Should(
be + able)[
to.Wrap()] }.";
Kiểm tra Null
public static void M(string s)
{
if (s is null)
{
throw new ArgumentNullException(nameof(s));
}
// Body of the method
}
Và bây giờ chúng ta có thể dễ dàng kiểm tra null bằng cách thêm ký tự !! sau parameter name:
public static void M(string s!!)
{
// Body of the method
}
Điều này sẽ khiến code của bạn ít dài dòng hơn, nhưng thực tế cách này có hữu dụng, và khi người khác đọc code của bạn sẽ như thế nào. Theo mình, đôi khi cái gì nó dài dòng hơn chút vẫn tốt hơn.
Raw string literals
string longMessage = """
This is a long message.
It has several lines.
Some are indented
more than others.
Some should start at the first column.
Some have "quoted text" in them.
""";
UTF-8 String Literals
byte[] array = "hello"; // new byte[] { 0x68, 0x65, 0x6c, 0x6c, 0x6f }
Span<byte> span = "dog"; // new byte[] { 0x64, 0x6f, 0x67 }
ReadOnlySpan<byte> span = "cat"; // new byte[] { 0x63, 0x61, 0x74 }
List patterns
int[] arr1 = { 1, 2, 10 };
int[] arr1 = { 1, 2, 5, 10 };
int[] arr1 = { 1, 2, 5, 6, 7, 8, 9, 10 };
Generic Attribute
public class FooAttribute<T>:Attribute
{
public T FooProperty {get;set;}
public FooAttribute<T>(T fooValue) => FooProperty = fooValue;
}
Lời kết
Để cập nhật các tính năng mới từ C# 11, các bạn có thể ghé Github repo theo liên kết sau:https://github.com/dotnet/roslyn/blob/main/docs/Language%20Feature%20Status.md
Mong bài viết hữu ích đến với bạn, chúc các bạn thành công!
Hieu Ho.