C# 语法糖 (更新中...

 扩展方法:

C#的扩展方法是一种方便而强大的语法糖,通过它,我们可以向现有的类或者对象添加额外的方法和属性,从而扩展了它们的功能和行为,而不需要在现有类或者对象的定义上进行修改。

具体来说,扩展方法要求必须定义在静态类中,并且必须是静态方法,方法的第一个参数前必须加上 this 关键字,它指定了扩展方法所针对的类型或对象,后面才是具体的方法名和参数列表。使用扩展方法时,我们需要在命名空间中导入静态类的命名空间,这样扩展方法才能被调用。

一个简单的扩展方法示例:

// 定义一个静态类,用于定义扩展方法
public static class StringExtensions
{
    // 定义一个扩展方法,用于统计字符串中某个字符出现的次数
    public static int GetCharCount(this string str, char ch) 
    //第一个参数前面必须加上关键字 this,这个参数就是扩展方法所扩展的类型(本例为string)
    {
        int count = 0;
        foreach (char c in str)
        {
            if (c == ch)
            {
                count++;
            }
        }
        return count;
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        string str = "hello, world";
 
        int count = str.GetCharCount('o');  // 调用扩展方法GetCharCount,并输出结果
       
        Console.WriteLine("字符'o'在字符串中出现的次数为:" + count);

    }
}

// 输出 : 字符'o'在字符串中出现的次数为:2

扩展方法的优点在于它可以通过简单的语法来扩展类型的功能,使代码更加简洁和易读。它特别适合于那些需要对已有代码进行增量开发和扩展的场景。

需要注意的是,扩展方法虽然能够提高代码的灵活性和可维护性,但不应当滥用它。应当遵守良好的编程风格和设计原则,避免产生歧义和混淆的方法名,以及避免扩展方法与存在的方法名称冲突,引起意外的程序行为。

int b = 0;//值类型
b?.ToString();//--- error --- 编译报错


C# 中的 ? 是条件运算符的一种,也称为 null 合并运算符null条件访问运算符。它有助于避免空引用异常。如果该运算符左边的操作数为 null,则返回 null,否则返回该操作数的值。

举例:使用?来判空:

object result = someObject?.SomeProperty;

//如果someObject是空,表达式会在?之前停止运算,并且返回null
//如果someObject非空,表达式会继续执行,返回someObject.SomeProperty的值

注意? 运算符只能用于可空类型或引用类型中的成员访问方法调用,不能用于值类型

? 和 ==null 的异同?

相同:

?和null 都可以用来判断空引用

不同:
?只能用于可空类型或者引用类型;null 可以用于任何类型;

int b = 0;//值类型,不是可空类型,不能赋null
var x = b?.ToString(); //--- error --- 编译报错 
var y = b == null; // y=false

?可以在一个表达式上多重判空;null 只能一个个引用类型挨个判空;

string a = null;
string b = null;
string c = "Hello";

// 直接使用 == 进行判空
bool isEqual = (a == null) && (b == null) && (c == "Hello");
Console.WriteLine(isEqual);     // 输出 True

// 使用 ? 运算符进行多重判空
bool isNullOrEqual = a?.Length == null && b?.Length == null && c?.Length == 5;
Console.WriteLine(isNullOrEqual);     // 输出 True

? 运算符可以与其他操作符一起使用,而 == null 只能与 == 或 != 一起使用。

       // 使用 + 运算符进行字符串拼接,同时判定 a 是否为空
       string result = "a 0的值为" + (a?.ToString() ?? "null");

       // 使用$进行字符串拼接,同时判定 a 是否为空
       string result2 = $"a 2 的值为{(a?.ToString() ?? "null")}";

在实际使用中,我们可以根据情况灵活使用这两种方式。如果需要进行多重判空或者操作可空类型或引用类型,建议使用 ? 运算符;如果仅需要判断一个引用类型是否为空,则使用 == null 更为简洁。


??

 ?? 是一个空值传播操作符,如果左侧的表达式值为 null,则返回右侧的表达式值。

string name = obj?.Name ?? "Default Name";

$ " "

字符串插值:在 C# 6.0 之后,我们可以使用 字符加上来插入变量值到字符串中。

string name = "John";
int age = 25;
Console.WriteLine($"My name is {name} and my age is {age}");

...

猜你喜欢

转载自blog.csdn.net/weixin_40695640/article/details/130347001