C#实用小知识:string和判断null

 

 

 

  • string

  string是常用的类型,它具有不可变性:就是一旦赋值,就不可变,如果再赋值 ,就重新开辟内存空间;保留性:如果一个字符串存在,另一个与其相同,他们会指向同一个地址,不会再开辟新内存空间;

  下面的Demo作个证明:

复制代码
public unsafe void Run()
{
    string a = "abcd";
    string b = "abcd";
    fixed (char* p = a)
    {
        Console.WriteLine("原a字符串地址= 0x{0:x}", (int)p);
    }
    fixed (char* p = b)
    {
        Console.WriteLine("原b字符串地址= 0x{0:x}", (int)p);
    }
    b = b+"efg";
    fixed (char* p = b)
    {
        Console.WriteLine("新b字符串地址= 0x{0:x}", (int)p);
    }
}
复制代码

结果

 

 

 

  string还提供了一些其他方法:

  string.Empty,和""是一样的;

  string.IsNullOrEmpty(string)判断一个字符串==null或==""返回true

  string.IsNullOrWhiteSpace(string) 判断一个字符串==null或==""或==" "返回true

 

  • 判断Null

 

如果有这样一段代码:

var appOrder = new AppOrder();
if (appOrder == null)
{
    WriteLine("appOrder == null:appOrder is null");
}

你觉结果会输出吗?

  常理是不会输出appOrder == null:appOrder is null但真正的结果是还真不一定,这里不能被new AppOrder欺骗了,因为还要看AppOrder对==的理解是什么。

 

如果代码是这么写:

复制代码
class NullDemo : Demo
 {
     public void Run()
     {
         var appOrder = new AppOrder();
         if (appOrder == null)
         {
             WriteLine("appOrder == null:appOrder is null");
         }       
     }
 }
 class Order
 {
     public static bool operator ==(Order left, Order right)
     {
         return true;
     }
     public static bool operator !=(Order left, Order right)
     {
         return true;
     } 
 }
class AppOrder : Order
{
}
复制代码


  appOrder == null:appOrder is null还真能输出,因为==被赋予了永恒相等,看起来判断为null用==不靠谱,那用什么呢?

 if (appOrder is null)
 {
     WriteLine("appOrder is null:appOrder is null");
 }

 

  想要更快更方便的了解相关知识,可以关注微信公众号 
 

 

 

posted @   刘靖凯  阅读(470)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示