zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C#中string用法实例详解

c#实例 详解 string 用法
2023-06-13 09:15:43 时间

在进行C#程序设计时,用的最多的莫过于string了,但有些时候由于不仔细或者基础的不牢固等因素容易出错,今天本文就来较为详细的总结一下C#中string的用法。具体如下:

1.string是一个引用类型,平时我们比较string对象,比较的是对象的值而不是对象本身

如下面代码所示:

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

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

2.string对象是不可修改的

如下代码所示:

stringstrA="abcde";
strA="aaaaa";

从表面上看似修改了strA的内容,事实上"abcde"没有被修改,而是从新创建了一个对象"aaaaa",然后把该对象的引用赋给strA,最后"abcde"会被作为垃圾回收。

3.string的创建

直接赋值:

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

构造:

char[]arr={"a","b","c","d","e"};
stringstrA=newstring(arr);//这里只列举一种

注意:没有Stringstr=newString("abcde");这样的构造,string是.NETFramework中String的别名。

4.string参数传递

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

测试代码如下:

staticvoidMain(string[]args)
{
stringstrA="abcde";
Deal(strA);
Console.WriteLine(strA);
Console.ReadLine();
}
staticvoidDeal(stringstr)
{
str=str.Substring(0,2);
}

运行结果:abcde

原因是通过值传递引用类型的参数时,有可能更改引用所指向的数据,如某类成员的值。但无法更改引用本身的值,通过ref关键字传递参数可解决该问题。

修正后的代码如下:

staticvoidMain(string[]args)
{
stringstrA="abcde";
Deal(strA);
Console.WriteLine(refstrA);
Console.ReadLine();
}
staticvoidDeal(refstringstr)
{
str=str.Substring(0,2);
}

结果:ab

此时传递的是引用本身,而不是副本

5.null字符串和空字符串

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

测试代码如下:

staticvoidMain(string[]args)
{
stringstrA="1";
stringstrB=string.Empty;
stringstrC=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

现看如下测试代码:

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

尽管该代码会出现以使用字符串串联来将新的字符追加到命名为strA的现有字符串,它实际上会为每个串联操作创建新的String对象。大大的降低了性能。可使用StringBuilder类代替String类多次更改字符串值,StringBuilder对象是可变的,当进行追加或删除字符串中的子字符串时,不会创建新的对象,而是在原来的对象上进行修改。完成StringBuilder对象的值的修改后,可以调用其StringBuilder.ToString方法将其转换为字符串

修改后的测试代码如下:

StringBuilderstrA=newStringBuilder();
for(inti=0;i<10000;i++)
{
strA.Append("abc");
}
Consolse.WriteLine(strA.ToString());

相信本文所述实例对于大家牢固掌握C#的string用法能起到一定的帮助和借鉴作用。