String.Empty、string=”” 和null的区别

本文详细解析了C#中String.Empty与string=的区别,阐述了优先使用String.Empty的原因,并通过代码示例说明了两者在内存空间占用、代码可读性和性能方面的差异。同时,介绍了string.IsNullOrEmpty()方法的内部实现,以及如何高效地判断字符串是否为空。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

String.Empty是string类的一个静态常量;

String.Empty和string=””区别不大,因为String.Empty的内部实现是:

public static readonly string Empty;
//这就是String.Empty 那是只读的String类的成员,也是string的变量的默认值是什么呢?

//String的构造函数
static String(){
    Empty = "";//Empty就是他""
    WhitespaceChars = new char[] {
        '\t', '\n', '\v', '\f', '\r', ' ', '\x0085', '\x00a0', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
        ' ', ' ', ' ', ' ', '', '\u2028', '\u2029', ' ', ''
     };

}

  

 再看一段代码:

string s1 = "";
string s2 = string.Empty;
if (s1 == s2)
{ Console.WriteLine("一模一样!"); } // 结果都是True Console.WriteLine("".Equals(string.Empty)); Console.WriteLine(object.ReferenceEquals(string.Empty, ""));

既然String.Empty和string=””一样,同样需要占用内存空间,为什么推荐优先使用String.Empty ?

string.Empty只是让代码好读,防止代码产生歧义,比如说:

string s = "";  string s = " ";   这个不细心看,很难看出是空字符串还是空格字符。

 

如果判断一个字符串是否是空串,使用

if(s==String.Empty)和if(s==””)的效率是一样的,但是最高效的写法是if(s.Length==0)

string.IsNullOrEmpty的内部实现方式:

public static bool IsNullOrEmpty(string value)
{
if (value != null) { return (value.Length == 0); } return true; }

   

而string str=null则是表示str未指向任何对象。

/// <summary> /// 条件查询HF /// </summary> /// <param name="HF"></param> /// <returns></returns> public async Task<HFFenYe> hfFenYe(int currentPage, int PageSize, HF hF) { try { // 构建基础查询,排除"档案删除"的记录 //var query = myDbContext.HFs.Where(hf => hf.HumanFileStatus != "档案删除"); IQueryable<HF> query = myDbContext.HF; query = query.Where(hf=>hf.HumanFileStatus!= "档案删除"); // 动态添加筛选条件 if (!string.IsNullOrEmpty(hF.FirstKindName)) { query = query.Where(hf => hf.FirstKindName == hF.FirstKindName); } if (!string.IsNullOrEmpty(hF.SecondKindName)) { query = query.Where(hf => hf.SecondKindName == hF.SecondKindName); } if (!string.IsNullOrEmpty(hF.ThirdKindName)) { query = query.Where(hf => hf.ThirdKindName == hF.ThirdKindName); } if (hF.RegistTime.HasValue) { query = query.Where(hf => hf.RegistTime >= hF.RegistTime); } if (hF.CheckTime.HasValue) { query = query.Where(hf => hf.RegistTime <= hF.CheckTime); } // 获取总记录数 HFFenYe.sumTotal = await query.CountAsync(); // 分页查询并投影到HF对象 HFFenYe.List = await query.Select(h => new HF { FirstKindName = h.FirstKindName ?? string.Empty, SecondKindName = h.SecondKindName ?? string.Empty, ThirdKindName = h.ThirdKindName ?? string.Empty, SalaryStandardName = h.SalaryStandardName ?? string.Empty, HumanName = h.HumanName ?? string.Empty, RegistTime = h.RegistTime, Register = h.Register, HumanId = h.HumanId }).Skip((currentPage - 1) * PageSize).Take(PageSize).ToListAsync(); return HFFenYe; } catch (Exception ex) { // 记录异常日志 Console.WriteLine($"报错了: {ex.Message}"); throw; } } 这是我的代码
最新发布
03-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值