中有的常用的方法应用,字符串要点

一、字符串

一.string.Empty

 

(1)先驾驭多少个与空类型相关的重中之重字和对象

  •   经过string定义3个字符串,只怕经过String类来创设对象。

    •   通过new String()
      创建有瞬间几种构造函数(从元数据),以此顺序创制string;
    • 美高梅开户网址 1美高梅开户网址 2

      //
              // 摘要:
              //     将 System.String 类的新实例初始化为由 Unicode 字符数组指示的值。
              //
              // 参数:
              //   value:
              //     Unicode 字符的数组。
              [SecuritySafeCritical]
              public String(char[] value);
              //
              // 摘要:
              //     将 System.String 类的新实例初始化为由指向 8 位有符号整数数组的指针指示的值。
              //
              // 参数:
              //   value:
              //     一个指针,指向以 null 结尾的 8 位带符号整数数组。
              //
              // 异常:
              //   T:System.ArgumentNullException:
              //     value 为 null。
              //
              //   T:System.ArgumentException:
              //     如果 value 是用 ANSI 编码的,则不能使用 value 初始化 System.String 的新实例。
              //
              //   T:System.ArgumentOutOfRangeException:
              //     要初始化的新字符串的长度过大,无法分配,该长度由 value 的 null 终止字符决定。
              //
              //   T:System.AccessViolationException:
              //     value 指定的地址无效。
              [CLSCompliant(false)]
              [SecurityCritical]
              public String(sbyte* value);
              //
              // 摘要:
              //     将 System.String 类的新实例初始化为由指向 Unicode 字符数组的指定指针指示的值。
              //
              // 参数:
              //   value:
              //     指向以 null 终止的 Unicode 字符数组的指针。
              //
              // 异常:
              //   T:System.ArgumentOutOfRangeException:
              //     当前进程并不是对所有编址字符都有读取权限。
              //
              //   T:System.ArgumentException:
              //     value 指定了包含无效 Unicode 字符的数组,或者 value 指定了小于 64000 的地址。
              [CLSCompliant(false)]
              [SecurityCritical]
              public String(char* value);
              //
              // 摘要:
              //     将 System.String 类的新实例初始化为由重复指定次数的指定 Unicode 字符指示的值。
              //
              // 参数:
              //   c:
              //     一个 Unicode 字符。
              //
              //   count:
              //     c 出现的次数。
              //
              // 异常:
              //   T:System.ArgumentOutOfRangeException:
              //     count 小于零。
              [SecuritySafeCritical]
              public String(char c, int count);
              //
              // 摘要:
              //     将 System.String 类的新实例初始化为由 Unicode 字符数组、该数组内的起始字符位置和一个长度指示的值。
              //
              // 参数:
              //   value:
              //     Unicode 字符的数组。
              //
              //   startIndex:
              //     value 内的起始位置。
              //
              //   length:
              //     要使用的 value 内的字符数。
              //
              // 异常:
              //   T:System.ArgumentNullException:
              //     value 为 null。
              //
              //   T:System.ArgumentOutOfRangeException:
              //     startIndex 或 length 小于零。- 或 -startIndex 和 length 之和大于 value 中的元素数。
              [SecuritySafeCritical]
              public String(char[] value, int startIndex, int length);
              //
              // 摘要:
              //     将 System.String 类的新实例初始化为由指向 8 位有符号整数数组的指定指针、该数组内的起始位置和一个长度指示的值。
              //
              // 参数:
              //   value:
              //     指向 8 位带符号整数数组的指针。
              //
              //   startIndex:
              //     value 内的起始位置。
              //
              //   length:
              //     要使用的 value 内的字符数。
              //
              // 异常:
              //   T:System.ArgumentNullException:
              //     value 为 null。
              //
              //   T:System.ArgumentOutOfRangeException:
              //     startIndex 或 length 小于零。- 或 -由 value + startIndex 指定的地址相对于当前平台来说太大;即,地址计算溢出。-
              //     或 -要初始化的新字符串的长度太大,无法分配。
              //
              //   T:System.ArgumentException:
              //     由 value + startIndex 指定的地址小于 64K。- 或 -如果 value 是用 ANSI 编码的,则不能使用 value 初始化 System.String
              //     的新实例。
              //
              //   T:System.AccessViolationException:
              //     value、startIndex 和 length 共同指定的地址无效。
              [CLSCompliant(false)]
              [SecurityCritical]
              public String(sbyte* value, int startIndex, int length);
              //
              // 摘要:
              //     将 System.String 类的新实例初始化为由指向 Unicode 字符数组的指定指针、该数组内的起始字符位置和一个长度指示的值。
              //
              // 参数:
              //   value:
              //     指向 Unicode 字符数组的指针。
              //
              //   startIndex:
              //     value 内的起始位置。
              //
              //   length:
              //     要使用的 value 内的字符数。
              //
              // 异常:
              //   T:System.ArgumentOutOfRangeException:
              //     startIndex 或 length 小于零,value + startIndex 引起指针溢出,或者当前进程并不是对所有编址字符都有读取权限。
              //
              //   T:System.ArgumentException:
              //     value 指定了包含无效 Unicode 字符的数组,或者 value + startIndex 指定了小于 64000 的地址。
              [CLSCompliant(false)]
              [SecurityCritical]
              public String(char* value, int startIndex, int length);
              //
              // 摘要:
              //     将 System.String 类的新实例初始化为由指向 8 位有符号整数数组的指定指针、该数组内的起始位置、长度以及 System.Text.Encoding
              //     对象指示的值。
              //
              // 参数:
              //   value:
              //     指向 8 位带符号整数数组的指针。
              //
              //   startIndex:
              //     value 内的起始位置。
              //
              //   length:
              //     要使用的 value 内的字符数。
              //
              //   enc:
              //     一个对象,用于指定如何对 value 所引用的数组进行编码。如果 enc 为 null,则假定以 ANSI 编码。
              //
              // 异常:
              //   T:System.ArgumentNullException:
              //     value 为 null。
              //
              //   T:System.ArgumentOutOfRangeException:
              //     startIndex 或 length 小于零。- 或 -由 value + startIndex 指定的地址相对于当前平台来说太大;即,地址计算溢出。-
              //     或 -要初始化的新字符串的长度太大,无法分配。
              //
              //   T:System.ArgumentException:
              //     由 value + startIndex 指定的地址小于 64K。- 或 -未能使用 value 初始化 System.String 的新实例,假定 value
              //     按照 enc 的指定进行编码。
              //
              //   T:System.AccessViolationException:
              //     value、startIndex 和 length 共同指定的地址无效。
              [CLSCompliant(false)]
              [SecurityCritical]
              public String(sbyte* value, int startIndex, int length, Encoding enc);
      

      View Code

    • 美高梅开户网址 3美高梅开户网址 4

      char []cstr = { 'a','b','c','d','e'};
                  char cstr1 = 'a';
                  sbyte se = 113;
      
                  String a = new String(cstr);
                  //
      
                  String b = new String(&cstr1);
      
                  String c = new String(&se);
      
                  String d = new String('d',2);
      
                  String e = new String(cstr,2,3);
      
                  String f = new String(&se,0,1);
                  Console.WriteLine((int)Convert.ToChar(f)+"\n");//113
                  String g = new String(&se,0,1,Encoding.UTF8);
                  Console.WriteLine("a:{0}\nb:{1}\nc:{2}\nd:{3}\ne:{4}\nf:{5}\ng:{6}",a,b,c,d,e,f,g);
      

      View Code

  •   string是C#基元类型(primitive),string不难的话就是编写翻译器直接协助的数据类型。运算符(==
    和 !=)是为着比较 string 对象的值, 而不是比较引用

    • string a = “1234”;
                  string b = "123";
                  b += "4";
                  Console.WriteLine(a == b);//比较值
                  Console.WriteLine((object)a == (object)b);//比较引用()
      

      中有的常用的方法应用,字符串要点。 

  •   string连接操作 (+=)

    •   缺点很显眼, 操作频繁的话非凡浪费内部存款和储蓄器空间的
    •   使用StringBuilder类对象方法append代替+=, 品质还有所进步
  •   null,” “和string.Empty的区别
    •   null代表不引用任何变量的空引用的值,null是引用变量的暗中认可值,
      值类型变量不可能利用
    •   ””表示分配二个内部存款和储蓄器为空的囤积空间。
    •   string.Empty表示空字符串,并且不分配内部存款和储蓄器空间。
  •   判断字符串为空 的俩种办法
    •   x.length==0 // 无法看清为null的字符串
    •   string.IsNullOrEmpty(x)
        

string.Empty就一定于 “” ,一般用于字符串的初步化 ,

(1)先精晓多少个与空类型相关的机要字和指标

 

比如: string a; Console.WriteLine(a);//那里会报错,因为从没开端化a

 

  Null : 

而下边不会报错: string a=string.Empty; Console.WriteLine(a);

  Null
:
 

  关键字表示不引用任何对象的空引用,它是拥有引用类型变量的暗中认可值,在2.0本子此前也就唯有引用变量类型可以为null,如(string
a=null)但在c#
2.0本子之后,Net也引入了能够为Null的值类型,但变量在概念的时候格局有所差别,如:int
?
a=null。详细看。不在内部存款和储蓄器中开发内存地址,可用于引用是不是可用。

抑或用于相比较: if(a==””) if(a==string.Empty) 上边两句是平等的机能。

  关键字表示不引用任何对象的空引用,它是享有引用类型变量的暗中认可值,在2.0版本在此以前也就只有引用变量类型能够为null,如(string
a=null)但在c#
2.0本子之后,Net也引入了足以为Null的值类型,但变量在概念的时候格局有所差异,如:int
?
a=null。详细看。不在内部存款和储蓄器中开拓内部存款和储蓄器地址,可用来引用是还是不是可用。

   DBNULL:

 

   DBNULL:

  是一个唯一类,相当于说那连串型的实例唯有三个,即DBNull.Value。首要用于提醒数据库中的字段值为空(null)时在.Net中映射的值,别的还足以用来在
COM Interop 中分别 VT_NULL 变量(与空对象关联)和 VT_EMPTY 变量(与
DBNull.Value
实例涉及)。详细看。它应该有定点不变的内部存储器。

二.String.IsNullOrEmpty 方法

  是1个唯一类,也正是说那体系型的实例唯有三个,即DBNull.Value。重要用于提示数据库中的字段值为空(null)时在.Net中映射的值,别的还足以用来在
COM Interop 中分别 VT_NULL 变量(与空对象关系)和 VT_EMPTY 变量(与
DBNull.Value
实例涉及)。详细看。它应该有确定地点不变的内部存款和储蓄器。

   String.Empty和””:

String.IsNullOrEmpty(value)

   String.Empty和””:

  那八个都代表空字符串,空字符串是叁个特有的字符串,所以它如故是二个字符串实例,也正是说它在内部存款和储蓄器中依然分配了分明的地点。

指令钦命的字符串是 null 依然 Empty 字符串。 能同时测试 String 是不是为
null 或其值是还是不是为 Empty 等价于  result = (value) == null || (value) ==
String.Empty;

  那八个都意味着空字符串,空字符串是3个优异的字符串,所以它如故是2个字符串实例,也正是说它在内部存款和储蓄器中如故分配了分明的地址。

     Convert.IsDBNull():重临有关钦定对象是不是为
DBNull
类型的指令。便是用来判断目的是不是为DBNULL的。其再次来到值是True或Flase。首要用于和数据库操作相关的值判断。

参数 value :类型:System.String ,要测试的字符串。

     Convert.IsDBNull():再次来到有关钦定对象是还是不是为
DBNull
类型的提醒。便是用来判定目的是或不是为DBNULL的。其重临值是True或Flase。重要用来和数据库操作相关的值判断。

 

回到值 类型:System.Boolean, 如果 value 参数为 null 或空字符串
(“”),则赶回 true;不然重返 false。

 

(2)各个的使用方法和频率

 

(2)各类的利用格局和效能

 

三.Nullable可空类型

 

    
对象的判定:使用Null可用以别的引用变量是还是不是为空的论断,是最中央的对象为空判断格局,在和数据库相关的操作中利用DBNull.vaule恐怕Convert.IsDBNUll。

Nullable<Int32>,读作“可空的 Int32”,可以被赋值为 -2147483648 到
2147483647 之间的任意值,也得以被赋值为 null 值。

    
对象的论断:使用Null可用以别的引用变量是否为空的判断,是最中央的对象为空判断方法,在和数据库相关的操作中采用DBNull.vaule或许Convert.IsDBNUll。

    
字符串判断:string在C#中也是三个引用类型,但其又兼备一定的特殊性。我们在使用string时,往往会把“变量值为空的字符串对象”和“变量值为空字符的字符串对象”搞混。所以通常会因为对此掌握不深引起不少难点,因为string是我们付出进程使用最频仍的类别之一,对于字符串的判定格局,通过对网上资料的盘整和调谐的实操经验现计算如下:

Nullable<bool> 能够被赋值为 true 或 false,或
null。在拍卖数据库和其余富含大概未赋值的因素的数据类型时,将 null
赋值给数值类型或布尔型的功效特别有用。

    
字符串判断:string在C#中也是多个引用类型,但其又有所一定的特殊性。大家在采纳string时,往往会把“变量值为空的字符串对象”和“变量值为空字符的字符串对象”搞混。所以时常会因为对此驾驭不深引起众多标题,因为string是大家开发进程选拔最频仍的品种之一,对于字符串的判断方法,通过对网上资料的整治和协调的实操经验现总计如下:

 
 string str 

例如,数据库中的布尔型字段能够储存值 true 或
false,大概,该字段也得以未定义。 

 
 string str 

  1:string.IsNullOrEmpty
== str 
那种方式不仅一回质量判断”空的字符串变量”,还是能够断定“值为空字符串的变量”,并且还足以让代码简洁美观。判断的频率也不算低。

可空类型具有以下特征:  ·可空类型表示可被赋值为 null
值的值类型变量。不能够创设基于引用类型的可空类型。(引用类型已帮助 null
值。)。 

  1:string.IsNullOrEmpty
== str 
那种艺术不仅壹回品质判断”空的字符串变量”,仍是可以够判定“值为空字符串的变量”,并且还足以让代码简洁雅观。判断的频率也不算低。

  2:str.Length
== 0
那种方法,不推荐应用。那种论断方式的进行效能最高,但要使用它你必须有限支撑字符串不null,假使为null就会报出13分,

·语法 T? 是 System.Nullable<T> 的简写,此处的 T
为值类型。这二种样式能够调换。  ·

  2:str.Length
== 0
那种措施,不推荐使用。那种论断格局的实施功效最高,但要使用它你必须保障字符串不null,假若为null就会报出10分,

  
3.str == string.Empty 或 str == “”
那二种情势,不推荐使用,他只得判断“值为空字符串”的字符串变量,而且作用相比低

为可空类型赋值与为一般值类型赋值的主意一致,如 int? x = 10; 或 double? d
= 4.108;。 

  
3.str == string.Empty 或 str == “”
那二种艺术,不推荐应用,他不得不判断“值为空字符串”的字符串变量,而且效能比较低

  4.str
== null 那种方法也略微推荐,原因和3相同。

·尽管基础项目标值为 null,请使用 System.Nullable.GetValueOrDefault
属性再次来到该基础项目所赋的值或默许值,

  4.str
== null 那种措施也有点推荐,原因和3平等。

比如 int j = x.GetValueOrDefault();  ·请使用 HasValue 和 Value
只读属性测试是还是不是为空和摸索值,例如 if(x.HasValue) j = x.Value;  
要是此变量包罗值,则 HasValue 属性重临True;或然,假如此变量的值为空,则赶回 False。   如若已赋值,则 Value
属性重回该值,不然将吸引 System.InvalidOperationException。 

  可空类型变量的暗中同意值将 HasValue 设置为 false。未定义 Value。  ·使用 ??
运算符分配暗许值,当前值为空的可空类型被赋值给非空类型时将利用该暗中同意值,

如 int? x = null; int y = x ?? -1;。 

·不容许行使嵌套的可空类型。将不编写翻译上边一行:Nullable<Nullable<int>>
n; 

程序代码

class NullableExample 

{  

   static void Main()

    {  

     int? num = null;  

    if (num.HasValue == true) 

     {  

      System.Console.WriteLine(“num = ” + num.Value); 

     } 

     else 

    {  

      System.Console.WriteLine(“num = Null”); 

     }  

    // 赋值为可空类型的暗许值 int y = num.GetValueOrDefault();  

    // 要是num.HasValue重临false,则num.Value将会掀起
InvalidOperationException分外 

美高梅开户网址 ,    try

    {

        y = num.Value;

     }  

     catch (System.InvalidOperationException e) 

    {  

      System.Console.WriteLine(e.Message); 

    } 

   } 

}  

上述将突显输出:  num = Null   Nullable object must have a value.

 

基类型(基本项目)

Nullable 类型用?构造,如:int?是整型int的Nullable 类型,1个Nullable
类型的基类型必须是值类型,

如int是值类型,它的Nullable 便是int? 如: int i=0; int? j=null;
基类型无法是援引类型,如: string s=”abc”; string? s=null;//错误

 

可空的时辰类型转换为string时索要专注:

Nullable<System.DateTime> SendTime;

string timeStr=SendTime.HasValue ? SendTime.Value.ToString(“yyyy-MM-dd
hh:mm:ss”) : “当前变量为null”;

HasValue :
获取一个值,提醒当前的System.Nullable<T>对象是还是不是有值。重回True和False.

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图