首页 > 编程语言 >11_C# 中字符串 string.Empty,"",null 三者的区别

11_C# 中字符串 string.Empty,"",null 三者的区别

时间:2024-03-03 23:14:58浏览次数:29  
标签:11 Console string C# WriteLine 字符串 null Empty

C# 中字符串 string.Empty、"" 和 null 三者的区别

1. string.Empty

  • string.Empty 是一个表示空字符串的静态字段。
  • 它实际上等同于 ""(空字符串),但使用 string.Empty 可以更加清晰地表示我们需要一个空字符串。

2. ""(空字符串)

  • 双引号中没有任何字符的字符串被称为空字符串。
  • 它是一个有效的字符串对象,但不包含任何字符。

3. null

  • null 表示一个引用类型的空引用。
  • 对于字符串对象,null 表示变量没有引用任何字符串对象。
  • 它不是一个有效的字符串对象,也没有任何长度或内容。

代码示例:

// 使用 string.Empty
string str1 = string.Empty;
Console.WriteLine(str1.Length); // 输出:0

// 使用 ""
string str2 = "";
Console.WriteLine(str2.Length); // 输出:0

// 使用 null
string str3 = null;
Console.WriteLine(str3?.Length); // 输出:(null)


// 比较 string.Empty 和 ""
Console.WriteLine(string.Empty == ""); // 输出:True


// 比较 string.Empty 和 null
Console.WriteLine(string.Empty == null); // 输出:False


// 比较 "" 和 null
Console.WriteLine("" == null); // 输出:False


// 使用 null 会导致空引用异常
try
{
    Console.WriteLine(str3.ToUpper()); // 抛出空引用异常
}
catch (NullReferenceException ex)
{
    Console.WriteLine(ex.Message); // 输出:对象引用未设置到对象的实例
}

总结:

  • string.Empty 和 "" 都表示空字符串,它们在功能上是相同的,可以用于表示一个空的、没有字符的字符串。

  • null 表示一个没有引用任何字符串对象的空引用,在使用时需要小心处理,以避免空引用异常。

建议:

  • 在需要明确表示空字符串时,使用 string.Empty 或 ""。
  • 在需要检查字符串是否为空时,使用 string.IsNullOrEmpty() 方法。
string name = "";
Console.WriteLine(name=="");                    // => True
Console.WriteLine(name==string.Empty);          // => True
Console.WriteLine(name==String.Empty);          // => True
Console.WriteLine(string.IsNullOrEmpty(name));  // => True
Console.WriteLine(String.IsNullOrEmpty(name));  // => True
  • 避免使用 null 来表示空字符串,因为它可能导致空引用异常。

标签:11,Console,string,C#,WriteLine,字符串,null,Empty
From: https://www.cnblogs.com/cookie2030/p/18050963

相关文章

  • 12_C#中的五大集合类
    C#中五大集合类及其使用示例C#中提供了五种常用的集合类:主要内容:List:可变大小的列表,可以存储任何类型的元素。Dictionary<TKey,TValue>:键值对集合,可以根据键快速查找值。HashSet:不包含重复元素的哈希集合。Stack:后进先出(LIFO)的堆栈。Queue:先进先出(FIFO)的队列......
  • 10_C# 中的 String 和 StringBuilder 的区别
    C#中的String和StringBuilder的区别1.String类String类表示不可变的字符串。一旦创建String对象,其内容就不能再被修改。对String对象进行任何修改操作都会返回一个新的String对象。示例:stringstr1="Hello";stringstr2=str1+"World!";Console.W......
  • 9_dynamic动态类型与object类型的区别
    C#中dynamic动态类型与object类型的区别1.object类型object类型是.NET中System.Object类的别名。在C#中,所有类型(预定义、用户定义、引用类型、值类型)都直接或间接继承自Object。因此,我们可以将任何类型的值用object对象来接收。2.dynamic动态类型动态......
  • 8_C#如何判断变量类型
    C#中判断变量类型的两种方法1.GetType()方法GetType()方法用于获取当前实例的准确运行时类型。该方法返回一个Type对象,该对象包含有关该类型的信息,例如类型名称、成员、属性等。示例:publicclassPerson{publicstringName{get;set;}}publicclas......
  • 7_C# 中的装箱和拆箱
    C#中的装箱和拆箱1.什么是装箱和拆箱?装箱:将值类型转换为引用类型的过程。拆箱:将引用类型转换为值类型的过程。2.装箱和拆箱的作用C#中值类型和引用类型的最终基类都是Object类型(它本身是一个引用类型)。通过装箱和拆箱,可以将值类型当做引用类型来处理,从而将值类型与......
  • C++编译过程
     第一步:.cpp→.i第二步:.i→.s  是汇编文件第三步:.s→.o 此时已经算是目标文件的最终形态了,完整后缀是.obj第四步:通过链接器将用的到的库,如.dll和.o文件连接起来,执行.exe就是相当于执行前面连接起来的这堆文件 详细过程和G++调用参考:https://zhuanlan.zhihu.c......
  • C++ map用法总结(整理)
    (转载补充)原文链接:https://blog.csdn.net/sevenjoin/article/details/819438641,map简介map是STL的一个关联容器,它提供一对一的hash。第一个可以称为关键字(key),每个关键字只能在map中出现一次;第二个可能称为该关键字的值(value);map以模板(泛型)方式实现,可以存储任意类型的数......
  • buffer 和 cache 的含义
    看到write-buffer和read-cache瞬间懂了 简单说,Buffer的核心作用是用来缓冲,缓和冲击。比如你每秒要写100次硬盘,对系统冲击很大,浪费了大量时间在忙着处理开始写和结束写这两件事嘛。用个buffer暂存起来,变成每10秒写一次硬盘,对系统的冲击就很小,写入效率高了,日子过得爽了。极大缓......
  • C语言基础-2、循环
    一、while语法反复多次的做,反复多次的判断if做一次并做一次判断while循环:当条件满足时,不断地重复循环体内语句ex1:#include<stdio.h>intmain(){ while(条件成立时) { //执行语句 } return0;}二、do-while语法先做循环体语句,再去判断循环语句ex1:*#includ......
  • P2946 [USACO09MAR] Cow Frisbee Team S
    原题链接题解设\(sum\)为总能力则若\(sum\)是\(F\)的倍数\(\to\)\(sum\mod\F=0\)根据加法求模的特性,我们可以设\(dp[i][j]\)为加上第\(i\)个元素后,模为\(j\)的方案数转移方程移得注意一个细节:按照遍历顺序,每个元素要么不是一套方案的第一个元素,要么是所......