C#基础精华03(常用类库StringBuilder,List泛型集合,Dictionary 键值对集合,装箱拆箱)

时间:2022-09-03 17:56:53

常用类库StringBuilder

StringBuilder高效的字符串操作
当大量进行字符串操作的时候,比如,很多次的字符串的拼接操作。
String 对象是不可变的。 每次使用 System. String 类中的一个方法时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。 在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常大。 如果要修改字符串而不创建新的对象,则可以使用 System.Text. StringBuilder 类。 例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。 
StringBuilder  != String//将StringBuilder转换为String.用ToString();
StringBuilder仅仅是拼接字符串的工具,大多数情况下还需要把StringBuilder转换为String.
StringBuilder sb = new StringBuilder();
sb.Append();//追加字符串
sb.ToString();//把StringBuilder转换为字符串。
sb.Insert();
sb.Replace();


List<T>泛型集合

List<T>是C#中一种快捷、易于使用的泛型集合类型,使用泛型编程为编写面向对象程序增加了极大的效率和灵活性。

1、List<T>用法

(1)创建一个List<T>泛型集合对象实例
List<T> list = new List<T>();// T 为列表中元素的类型

List<string> mlist = new List<string>();//创建了一个 string 类型的集合

 

(2)以一个集合作为参数创建新的泛型集合对象实例
string[] strArr ={"1","2","3","4","5"};
List<string> strList =List<string>(strArr);//把数组作为参数新建一个string类型集合

 

2、添加元素到List<T>

(1)添加一个元素
strList.Add("Hello");//把一个字符串添加到strList集合中
 
(2)添加一组元素集合
string[] strArr ={"1","2","3","4","5"};
strList.AddRange(strArr);//把数组添加到集合中,数组也可以理解为一个有限长度的集合
 
(3)在指定位置添加要添加的元素
Insert(int index, T item);//index 为要添加元素的位置
以下示例:
strList.Insert(1,"萨瓦迪卡");//在集合中第1个元素后面的位置插入一个元素

 

3、泛型集合的遍历

可以使用 foreach 循环轻松遍历 List<T> 中的所有元素,示例:
foreach(string s in strList)
{
    Console.WriteLine(s);//输出遍历到的元素的值
}
 
 
 

Dictionary<K , V>  键值对集合

 
 
 
下面是对于Dictionary的一些常用的操作,包括遍历,添加,删除等
 
(1)新建一个Dictionary<Keys ,Values>  键值对集合
//新建一个键是int类型 ,值是 string类型的键值对集合
Dictionary<int,string> dictionary =newDictionary<int,string>();

 

(2)往键值对集合添加数据
//注意:这里的键可以是声明类型的范围的任意值,不必按照顺序,会跟stirng类型的值相对应
dictionary.Add(1,"张三");
dictionary.Add(21,"李四");
dictionary.Add(33,"王五");
dictionary.Add(4,"赵六");

 

(3)遍历键值对集合的Keys(键)和Values(值)
foreach(KeyValuePair<int,string> kvp in dictionary)
{
    //输出遍历到的键值对集合元素的键和值
    Console.WriteLine("key={0},value={1}", kvp.Key, kvp.Value);
}
 
(4)遍历Keys(键)
foreach(int j in dictionary.Keys)
{
    //输出遍历到的键值对元素的键
    Console.WriteLine("key={0},value={1}", j, dictionary[j]);
}
 
(5)遍历Values(值)
//遍历Values
foreach(string item in dictionary.Values)
{
    //输出遍历到的Values(值)
    Console.WriteLine("value:{0}", item);
}
 
 
(5)判断键值对集合是否包含某个Keys(键)
//判断是否包含 2 这个键,返回bool类型,true则包含
if(dictionary.ContainsKey(2))
{
    //输出这个键所对应的值
    Console.WriteLine(dict[2]);
}
1.装箱、拆箱必须是: 值类型→引用类型  或  引用类型→值类型。             object,接口。值类型是可以实现接口。             Person p=new Student();//这个叫隐式类型转换,不叫装箱。             Student stu=(Student)p;//这个叫显示类型转换,不叫拆箱。             int类型为什么能装箱到object类型,但不能装箱到string类型或Person类型,             因为object类型是int类型的父类。  2.拆箱时,必须用装箱时的类型来拆箱             装箱时如果是int,拆箱必须用int,不能用double  3.方法重载时,如果具有该类型的重载,那么就不叫拆箱或装箱。 int n=10; Console.WriteLine(n);//没有发生装箱,因为方法重载。 ============================== 1.以下代码进行了几次装箱?(3次装箱,1次拆箱,注意数字与字符串相加,最终调用的是string.Contact()) int n = 10; object o = n; n = 100; Console.WriteLine(n + "," + (int)o); Console.ReadKey(); //通过Reflector查看,并说明为什么?