博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(转载)C#中泛型学习笔记
阅读量:6969 次
发布时间:2019-06-27

本文共 8070 字,大约阅读时间需要 26 分钟。

 前言:这篇博客我主要说一下C#中泛型的使用,也就是List和Dictionary字典集合的使用,我在这里说的主要说的是如何去使用,而不是长篇大论的去研究泛型的底层,但我们有一定程序的时候在研究,使学习的能够很快的学习集合然后自己研究集合的一些高级用法,不在最后还列举出了一些常用的小案例。

  1. 泛型集合

(1) 泛型集合就是不确定的集合,语法中有一个尖括号,里面放什么类型,这个集合就变成什么类型

(2)List

            1)举例说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
static
void
Main(
string
[] args)
  
{
  
        
List<
int
> listInt =
new
List<
int
>();
  
        
listInt.AddRange(
new
int
[] { 1, 34, 54, 65, 76, 78 });
  
        
int
sum = 0;
  
        
for
(
int
i = 0; i < listInt.Count; i++)
   
         
{
  
                 
sum += listInt[i];
  
         
}
  
         
Console.WriteLine(sum);
  
         
Console.ReadKey();
  
}

     (3)Dictionary  (Dictionary<TKey,TValue>)

            定义一个泛型集合:Dictionary<TKey,Tvalue> dic=new Dictionary<TKey,Tvalue>();

            1)增加

                   Add 将指定的键值对添加到字典集合中

                   方法原型:void dic.Add(T key,T Value)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Dictionary<
string
,
string
> openWith =
new
Dictionary<
string
,
string
>();
  
 
try
  
{
  
          
openWith.Add(
"txt"
,
"notepad.exe"
);
  
          
openWith.Add(
"bmp"
,
"paint.exe"
);
  
          
openWith.Add(
"dib"
,
"paint.exe"
);
  
          
openWith.Add(
"rtf"
,
"wordpad.exe"
);
  
          
openWith.Add(
"txt"
,
"winword.exe"
);
  
}
  
catch
(ArgumentException)
  
{
  
           
Console.WriteLine(
"添加失败,请检查"
);
  
}

                          //输出结果是添加失败,请检查,以为添加了相同的键

            2)删除

                   Remove 从字典集合中移除指定的键的值

                          方法原型:bool dic.Remove(TKey key);                     

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Dictionary<
string
,
string
> openWith =
new
Dictionary<
string
,
string
>();
  
openWith.Add(
"txt"
,
"notepad.exe"
);
  
openWith.Add(
"bmp"
,
"paint.exe"
);
  
openWith.Add(
"dib"
,
"paint.exe"
);
  
openWith.Add(
"rtf"
,
"wordpad.exe"
);
  
openWith.Remove(
"txt"
);
  
 
foreach
(var item
in
openWith)
  
{
  
       
Console.WriteLine(item.Key);
  
}
  
//输出结果:bmp dib rtf
  
Clear 从字典集合中移除所有的值
  
 
方法原型:
void
dic.Clear();
  
         
Dictionary<
string
,
string
> openWith =
new
Dictionary<
string
,
string
>();
  
         
openWith.Add(
"txt"
,
"notepad.exe"
);
  
         
openWith.Add(
"bmp"
,
"paint.exe"
);
  
         
openWith.Add(
"dib"
,
"paint.exe"
);
  
         
openWith.Add(
"rtf"
,
"wordpad.exe"
);
  
         
openWith.Clear();
  
         
foreach
(var item
in
openWith)
  
         
{
  
                
Console.WriteLine(item.Key);
  
         
}
  
 
//输出结果为空

            3)查询

                   ContainsKey 得到字典集合中是否包含指定的键

                          方法原型:bool dic.ContainsKey(TKey,key);     

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Dictionary<
string
,
string
> openWith =
new
Dictionary<
string
,
string
>();
  
openWith.Add(
"txt"
,
"notepad.exe"
);
  
openWith.Add(
"bmp"
,
"paint.exe"
);
  
openWith.Add(
"dib"
,
"paint.exe"
);
  
openWith.Add(
"rtf"
,
"wordpad.exe"
);
  
if
(!openWith.ContainsKey(
"txt"
))
  
{
  
          
openWith.Add(
"txt"
,
"notepat++"
);
  
}
  
else
  
{
  
         
Console.WriteLine(
"已经存在"
);
  
}

                                 //输出结果:已经存在

                   COntainsValue 得到字典集合中是否包含指定的值

                          方法原型:bool dic.ContainsValue(TValue,value);

                                 Dictionary<string, string> openWith = new Dictionary<string, string>();

                                 openWith.Add("txt", "notepad.exe");

                                 openWith.Add("bmp", "paint.exe");

                                 openWith.Add("dib", "paint.exe");

                                 openWith.Add("rtf", "wordpad.exe");

                                 if (openWith.ContainsValue("paint.exe"))

                                 {

                                        Console.WriteLine("已经存在");

                                 }

                                 //输出结果:已经存在

            4)TryGetValue 获得于指定的键相关联的值

                   方法原型:bool dic.TryGetValue(TKey key,out TVlaue value);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Dictionary<
string
,
string
> openWith =
new
Dictionary<
string
,
string
>();
  
openWith.Add(
"txt"
,
"notepad.exe"
);
  
openWith.Add(
"bmp"
,
"paint.exe"
);
  
openWith.Add(
"dib"
,
"paint.exe"
);
  
openWith.Add(
"rtf"
,
"wordpad.exe"
);
  
string
value =
""
;
  
if
(openWith.TryGetValue(
"rtf"
,
out
value))
  
{
  
       
Console.WriteLine(
"Key=rtf,value={0}"
, value);
  
}
  
else
  
{
  
         
Console.WriteLine(
"根据rtf键没有找到对应的值"
);
  
}

                          //输出结果:key=rtf,value=wordpad.exe

                   1)举例说明:

                          static void Main(string[] args)

                          {

                                 Dictionary<char, string> dic = new Dictionary<char, string>();

                                 dic.Add('1', "爱情这东西");

                                 foreach (KeyValuePair<char, string> item in dic)

                                 {

                                        Console.WriteLine(item);

                                 }

                                 Console.ReadKey();

                          }

     (4)案例1:把分拣奇数的程序用泛型实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
static
void
Main(
string
[] args)
 
       
{
 
           
string
str =
"3 45 65 34 68 67 87 98"
;
 
           
//1 split
 
           
string
[] nums = str.Split(
new
char
[] {
' '
}, StringSplitOptions.RemoveEmptyEntries);
 
           
//2 list<string>
 
           
List<
string
> odd =
new
List<
string
>();
//奇数
 
           
List<
string
> even =
new
List<
string
>();
//偶数
 
           
//3 for循环判断奇偶
 
           
for
(
int
i = 0; i < nums.Length; i++)
 
           
{
 
               
//第一种方法
 
               
//int num = Convert.ToInt32(nums[i]);
 
               
//if (num % 2 == 0)
 
               
//{
 
               
//    even.Add(nums[i]);
 
               
//}
 
               
//else
 
               
//{
 
               
//    odd.Add(nums[i]);
 
               
//}
 
               
//第二种方法
 
               
string
num = nums[i];
 
               
char
ch = num[num.Length - 1];
 
               
int
last = ch -
'0'
;
 
               
if
((nums[i][nums[i].Length - 1] -
'0'
) % 2 == 0)
 
               
{
 
                   
even.Add(nums[i]);
 
               
}
 
               
else
 
               
{
 
                   
odd.Add(nums[i]);
 
               
}
 
           
}
 
           
odd.AddRange(even);
 
           
//4转换
 
           
Console.WriteLine(
string
.Join(
" "
, odd.ToArray()));
 
       
}

     (5)案例2:将int数组中的奇数放到一个新的int数组中返回

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
static
void
Main(
string
[] args)
 
       
{
 
           
int
[] nums = { 1, 3, 5, 565, 76, 78, 98, 90, 4, 545 };
 
           
List<
int
> listInt =
new
List<
int
>();
 
           
for
(
int
i = 0; i < nums.Length; i++)
 
           
{
 
               
if
(nums[i] % 2 == 1)
 
               
{
 
                   
listInt.Add(nums[i]);
 
               
}
 
           
}
 
           
for
(
int
i = 0; i < listInt.Count; i++)
 
           
{
 
               
Console.WriteLine(listInt[i] +
" "
);
 
           
}
 
           
Console.ReadKey();
 
       
}

     (6)案例3:从一个整数的List<int>中取出最大数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
static
void
Main(
string
[] args)
  
        
{
  
            
int
[] nums = { 2, 34, 454, 65, 76, 77, 778, 898, 989 };
  
            
int
max =
int
.MinValue;
  
            
int
min =
int
.MaxValue;
  
            
List<
int
> listInt =
new
List<
int
>();
  
            
listInt.AddRange(nums);
  
            
for
(
int
i = 0; i < listInt.Count; i++)
  
            
{
  
                
if
(min > listInt[i])
  
                
{
  
                    
min = listInt[i];
  
                
}
  
                
if
(max < listInt[i])
  
                
{
  
                    
max = listInt[i];
  
                
}
  
            
}
  
            
Console.WriteLine(max);
  
            
Console.WriteLine(min);
  
        
}

     (7)把123转换为"壹贰叁"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
static
void
Main(
string
[] args)
 
       
{
 
           
string
var =
"壹贰叁肆伍陆柒捌玖"
;
 
           
Dictionary<
char
,
char
> dic =
new
Dictionary<
char
,
char
>();
 
           
for
(
int
i = 0; i <var.Length ; i++)
 
           
{
 
               
dic.Add((
char
)(i +
'0'
), var[i]);
 
           
}
 
           
while
(
true
)
 
           
{
 
               
Console.Write(
"请输入一行数字:"
);
 
               
string
str = Console.ReadLine();
 
               
StringBuilder sb =
new
StringBuilder();
 
               
for
(
int
i = 0; i < str.Length; i++)
 
               
{
 
                   
char
num = str[i];
 
                   
char
word = dic[num];
 
                   
sb.Append(word);
 
               
}
 
               
Console.WriteLine(sb.ToString());
 
               
Console.ReadKey();
 
           
}
 
       
}

     (8)计算字符串中每种字符出现的次数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
static
void
Main(
string
[] args)
  
        
{
  
            
Dictionary<
char
,
int
> dic =
new
Dictionary<
char
,
int
>();
  
            
Console.Write(
"请输入一句话"
);
  
            
string
str = Console.ReadLine();
  
            
for
(
int
i = 0; i < str.Length; i++)
  
            
{
  
                
//dic.Add(str[i], 1);
  
                
//dic[str[i]]++;
  
                
char
current = str[i];
  
                
if
(dic.ContainsKey(current))
  
                
{
  
                    
//如果集合不存在这个数据
  
                    
//dic[current] += 1;
  
                    
dic[current]++;
  
                
}
  
                
else
  
                
{
  
                    
//如果集合中不存在这个数据
  
                    
dic.Add(current, 1);
  
                
}
  
            
}
  
            
foreach
(KeyValuePair<
char
,
int
> item
in
dic)
  
            
{
  
                
Console.WriteLine(
"子符{0}出现了{1}次"
, item.Key, item.Value);
  
            
}
  
            
Console.ReadKey();
  
        
}
  1. Dictionary就是Hashtable的泛型形式

(1) 哈尔算法是一个函数

            Add(Key,Value);

            dic[Key];

(2)哈希算法是一个通过Key来计算地址的函数

            1)传入一个key和一个value后

            2)通过哈希算法计算key的到一个地址

            3)将地址存入键值对集合,并将value存入地址所在的地方

            4)等到访问的时候直接通过key计算出地址,直接找到存储的变量

  1. 能不能用for循环遍历一个集合Dic

(1) 在for循环中如果不使用对应的递增序号,"我"就认为不叫使用了for循环

     (2)foreach循环的过程

            1)找到数据源,调用GetEnumertor方法,得到枚举值

            2)in,调用MoveNext方法

            3)如果MoveNext返回true,使用Current得到当前数据

            4)如果返回false,则跳出循环

                   static void Main(string[] args)

                   {

                          Dictionary<string, string> dic = new Dictionary<string, string>();

                          dic.Add("1111", "2222");

                          dic.Add("0000", "3333");

                          var enumrator = dic.GetEnumerator();

                          //while (enumrator.MoveNext())

                          //{

                          //    Console.WriteLine(enumrator.Current.Key + "," + enumrator.Current.Value);

                          //}

                          for (; enumrator.MoveNext(); )

                          {

                                 Console.WriteLine(enumrator.Current.Key + "," + enumrator.Current.Value);

                          }

                   }

  1. 等于

(1) Equals 确定指定的Object是否等于当前的Object类型

            方法原型:

                   bool Equals(Object obj)

                   Object Obj1 = new Object();

            Object Obj2 = new Object();

            Console.WriteLine(Obj1.Equals(Obj2));

            Obj2 = Obj1;

            Console.WriteLine(Obj1.Equals(Obj2));

                   输出结果: False,True

转载于:https://www.cnblogs.com/imust/archive/2012/11/16/2773987.html

你可能感兴趣的文章
vi vim配置
查看>>
PP日志-Day 3
查看>>
eclipse 调试 jdk 看不到变量的值
查看>>
如何解决分配到Autoconfiguration IPV4 地址
查看>>
.NET 远程操作MSMSQ无权限或操作出错问题解决
查看>>
浅谈企业信息泄密:信任不存,效益焉在?
查看>>
Mysql密码管理及授权
查看>>
JAVA线程安全之synchronized关键字的正确用法
查看>>
springmvc+mybatis+dubbo分布式平台-maven构建根项目
查看>>
一个小常识
查看>>
Nginx防盗链 Nginx访问控制 Nginx解析php相关配置 Nginx代理
查看>>
解决虚拟机中使用ntpdate报错:ntpdate[46700]: no server suitab
查看>>
Docker 快速删除所有容器
查看>>
【OCP认证12c题库】CUUG 071题库考试原题及答案(27)
查看>>
OSS支持IPV6/IPV4双栈访问域名
查看>>
阿里云应用实时监控 ARMS 再升级,支持 Prometheus 开源生态
查看>>
最全面的IGMP协议总结!
查看>>
你还在 Select * 吗?
查看>>
机器学习能革了数据库索引的命吗?
查看>>
把PDF转成PPT的免费工具
查看>>