5 个 C# 和 .NET小技巧

作者:微信公众号:【架构师老卢】
2-2 15:32
31

概述:我们每个人的发展方式都不同,这很好。但是我们都有一些别人不知道的技巧或窍门。在这篇文章中,我想与你分享我的 5 大 C# 和 .NET 技巧和窍门。也许有些是熟悉的,也许有些是已知的,或者有些不适用于你。Some 可能仅适用于 .NET 8。因此,如果在 Visual Studio 中看不到这些语句,请安装 Visual Studio,或 .NET 8 正式发布。他的想法不是要详细地介绍它们,而是给你一个想法的简短描述和一个例子。如果您对特定提示/技巧有很多疑问,请在评论中告诉我。如果有足够的要求,我将用一整篇文章来介绍它。在大多数示例中,我将假设以下类、枚举和列表:public class

我们每个人的发展方式都不同,这很好。但是我们都有一些别人不知道的技巧或窍门。在这篇文章中,我想与你分享我的 5 大 C# 和 .NET 技巧和窍门。也许有些是熟悉的,也许有些是已知的,或者有些不适用于你。

Some 可能仅适用于 .NET 8。因此,如果在 Visual Studio 中看不到这些语句,请安装 Visual Studio,或 .NET 8 正式发布。

他的想法不是要详细地介绍它们,而是给你一个想法的简短描述和一个例子。如果您对特定提示/技巧有很多疑问,请在评论中告诉我。如果有足够的要求,我将用一整篇文章来介绍它。

在大多数示例中,我将假设以下类、枚举和列表:

public class Product  
{  
    public int Id { get; set; }  
    public string Title { get; set; }  
    public int Stock { get; set; }  
    public Status Status { get; set; }  
    public bool Available { get; set; }  
}  
  
public enum Status  
{  
    Ordered,  
    Delivered  
}  
  
List<Product> products = new()  
{  
    new() { Id = 1, Title = "7Up", Status = Status.Ordered, Stock = 10, Available = true },  
    new() { Id = 2, Title = "Chips", Status = Status.Ordered, Stock = 0, Available = true },  
    new() { Id = 3, Title = "Sugar", Status = Status.Delivered, Stock = 67, Available = true },  
    new() { Id = 4, Title = "Meatballs", Status = Status.Delivered, Stock = 2, Available = true },  
};

1:合并 If 语句

有时 if 语句是嵌套的。这是因为您需要进行多次检查才能得出结论。以以下代码为例:

if (chips.Stock == 0)  
{  
    if (chips.Status == Status.Ordered)  
    {  
        chips.Available = false;  
    }  
}

这是一段非常简单的小代码。但是你知道你可以将这两个if语句合并为一个吗?

if(chips is { Stock: 0, Status: Status.Ordered })  
{  
    chips.Available = false;  
}

这样,您可以将多个 if 语句变得非常小。不过,请留意可读性!这是一个小例子,但我设法将 6 个 if 语句合并为一个,但可读性是......不是那么好。

2:模式匹配

想象一下以下代码:

object? something = products\[0\];  
if(something != null && something.GetType() == typeof(Product))  
{  
    Product product = (Product)something;  
  
    Console.WriteLine($"The type you are looking at is a {product.GetType()} and has the title {product.Title}");  
}

一种非常传统的检查对象的方法,我们假设它不知道实际类型是什么,它不是 null 并且它属于某种类型(在本例中为 Product)。

您也可以使用它,这也是传统的:

object? something = products[0];  
if(something != null && something is Product)  
{  
    Productproduct = (Product)something;  
  
    Console.WriteLine($"The type you are looking at is a {product.GetType()} and has the title {product.Title}");  
}

两者都没有错,但是通过模式匹配会更容易一些。

模式匹配背后的想法是,你有一个空检查(something != null),针对特定类型(Product)测试它,强制转换,并减少代码。

如果你把它应用到上面的代码中,你会得到这个:

if(something is Product product)  
{  
    Console.WriteLine($"The type you are looking at is a {product.GetType()} and has the title {product.Title}");  
}

没有空检查,没有额外的强制转换,代码更少。

3:空合并赋值运算符

第一次听说这个,我有点害怕。通常,当某件事很长并且只由大词组成时,很难理解和/或实施。但这个不是。

我认为很多使用 C# 的人都已经在这样做了,但如果你还没有这样做,请不要感到羞耻。

这个应该检查一个变量是否为 null,如果是,它应该分配一个值。如果它不是 null,则应保留原始值。

以下示例将给出错误。想象一下变量 apple 是一个参数,而您不确定其值:

Product apple = null;  
Console.WriteLine(apple.Title);

这意味着我们需要检查苹果是否为 null,因此我们需要初始化它并为 Title 属性赋值。容易:

Product apple = null;  
  
if (apple == null)  
    apple = new() { Title = "Green apple" };  
  
Console.WriteLine(apple.Title);

但是我们可以用 Null-Coalescing Assignment Operator 来缩小这种方式(我只是复制粘贴它,不会一直输入它)。

Product apple = null;  
apple ??= new() { Title = "Green apple" };  
  
Console.WriteLine(apple.Title);

更少的代码,如果你让我更好地阅读。但一如既往:注意可读性。

4:表达式-身体构造函数

从 C# 7 开始可用,当前版本为 11。正如我们大多数人所知道的那样,可以使用参数初始化对象或类。像这样的东西:

public class Product  
{  
    public int Id { get; set; }  
    public string Title { get; set; }  
    public int Stock { get; set; }  
    public Status Status { get; set; }  
    public bool Available { get; set; }  
  
    public Product(string title, int stock, Status status)  
    {  
        Title = title;  
        Stock = stock;  
        Status = status;  
    }  
}

但是,您可以使用表达式设置属性的值,从而减少代码数量,并且不必担心构造和解构值。

public class Product  
{  
    public int Id { get; set; }  
    public string Title { get; set; }  
    public int Stock { get; set; }  
    public Status Status { get; set; }  
    public bool Available { get; set; }  
  
    public Product(string title, int stock, Status status) => (Title, Stock, Status) = (title, stock, status);  
}

要知道,在较新的版本中,您还可以在类本身上使用主构造函数,而不是定义构造函数。

public class Product(string title, int stock, Status status)  
{  
    public int Id { get; set; }  
    public string Title { get; set; } = title;  
    public int Stock { get; set; } = stock;  
    public Status Status { get; set; } = status;  
    public bool Available { get; set; }  
}

5:调试器显示属性

本文的最后一个。

DebuggerDisplayAttribute 显示有关已初始化对象的详细信息。

如果我们使用 apple(第 3 章:Null-Coalescing 赋值运算符)调试代码并将鼠标悬停在变量 apple 上,您将看到以下内容:

变量 apple shows {Product}

如果我们想看到苹果的内容,比如股票,我们需要扩展苹果手表(不,不是那个苹果手表)。但是,有一种更简单的方法可以更快地查看信息:DebuggerDisplayAttribute。

使用 DebuggerDisplayAttribute,您可以查看有关已初始化对象的详细信息。

这样,您可以查看有关对象的大量信息,而无需展开它。您可以根据需要自定义文本。

结论

这些是我给你的 5 个 C# 和 .NET 提示和技巧。也许有些是你所知道的,也许有些是不知道的。也许你觉得它们无关紧要,也许你觉得它们相关,我希望你喜欢这篇文章。

相关留言评论
昵称:
邮箱:
阅读排行