如某类成员的值

时间:2022-03-27 09:18:33

在进行C#措施设计时,用的最多的莫过于string了,,但有些时候由于不仔细或者根本的不安稳等因素容易堕落,今天本文就来较为详细的总结一下C#中string的用法。具体如下:


1.string是一个引用类型,平时我们对照string东西,对照的是东西的值而不是东西自己

如下面代码所示:

string strA="abcde"; string strB="abc"; string strC="de"; Console.WriteLine(strA == (strB+strC));//true Console.WriteLine((object)strA == (object)(strB+strC));//false

因为字符串内容不异但引用的不是同一个实例


2.string东西是不成改削的

如下代码所示:

string strA="abcde"; strA="aaaaa";

从外貌上看似改削了strA的内容,事实上”abcde”没有被改削,而是重新创建了一个东西”aaaaa”,然后把该东西的引用赋给strA,最后”abcde”会被作为垃圾回收。


3.string的创建

直接赋值:

string strA="abcde";//创建一个内容为abcde的string东西,然后将该东西的引用赋给strA

结构:

char[] arr={‘a‘,‘b‘,‘c‘,‘d‘,‘e‘}; string strA=new string(arr);//这里只列举一种

注意:

没有String str=new String(“abcde”);这样的结构,string 是 .NET Framework 中String的别号


4.string参数通报

string是引用类型,我们试图在一个函数里转变这个值

测试代码如下:

static void Main(string[] args) { string strA = "abcde"; Deal(strA); Console.WriteLine(strA); Console.ReadLine(); } static void Deal(string str) { str = str.Substring(0, 2); }

运行功效:abcde

原因是

通过值通报引用类型的参数时,有可能变动引用所指向的数据,如某类成员的值。但无法变动引用自己的值,通过ref关键字通报参数可解决该问题

修正后的代码如下:

static void Main(string[] args) { string strA = "abcde"; Deal(strA); Console.WriteLine(ref strA); Console.ReadLine(); } static void Deal(ref string str) { str = str.Substring(0, 2); }

功效:ab


此时通报的是引用自己,而不是副本


5.null 字符串和空字符串

null 字符串:没有分配内存;空字符串分配了内存,但内存里面没有数据.

测试代码如下:

static void Main(string[] args) { string strA = "1"; string strB = string.Empty; string strC = null; Console.WriteLine(int.Parse(strA));//正确 Console.WriteLine(int.Parse(strB));//输入字符串的格局不正确 Console.WriteLine(strC.ToString());//未将东西引用设置到东西的实例。 Console.ReadLine(); }

内置要领字符串是否为 null 或为空:


IsNullOrEmpty等同于 if (str == null || str.Equals(String.Empty))

IsNullOrWhiteSpace等同于  if (str == null || str.Equals(String.Empty) || str.Trim().Equals(String.Empty))


6.StringBuilder

现看如下测试代码:

string strA="abc" for(int i=0;i<10000;i++) { strA+="abc"; } Consolse.WriteLine(strA);

尽管该代码会呈现以使用字符串串联来将新的字符追加到定名为 strA 的现有字符串,它实际上会为每个串联操纵创建新的 String 东西。大大的降低了性能。可使用 StringBuilder 类取代String 类多次变动字符串值,StringBuilder 东西是可变的,当进行追加或删除字符串中的子字符串时,不会创建新的东西,而是在本来的东西长进行改削。 完成 StringBuilder 东西的值的改削后,可以挪用其 StringBuilder.ToString 要领将其转换为字符串

改削后的测试代码如下:

StringBuilder strA=new StringBuilder(); for(int i=0;i<10000;i++) { strA.Append("abc"); } Consolse.WriteLine(strA.ToString());