• 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");
     }
      想要更快更方便的了解相关知识,可以关注微信公众号 
     

     

  • 相关阅读:
    [MongoDB]
    [solr]
    数据结构-二叉树
    vue-学习笔记-Class 与 Style 绑定
    vue-学习笔记-计算属性和侦听器(computed和watch)
    lodash的debounce函数
    vue-学习笔记-模板语法
    vue-学习笔记-Vue 实例
    vue-介绍章节
    工具网站推荐-jsfiddle,一款在线写代码的网站
  • 原文地址:https://www.cnblogs.com/axzxs2001/p/15862476.html
Copyright © 2020-2023  润新知