当前位置: 移动技术网 > IT编程>开发语言>.net > [.NET] CastingEnumerable

[.NET] CastingEnumerable

2019年04月19日  | 移动技术网IT编程  | 我要评论

生活大爆炸第十季下载,魔幻妖塔,高株元

前言 :
写程式难免,会遇到要使用自订函式来作物件阵列转型。
写了一个物件来做这个动作,跟大家分享。

说明 :
这个物件的特点为:
1. 使用到才转型。不会在记忆体,建立整个转型后的阵列副本。
2. 可在转型时加入参数。

使用范例 :
view source
 

01 namespace clk.collections.consoleapplication
02 {
03     public class user
04     {
05         public string lastname = string.empty;
06  
07         public string firstname = string.empty;
08     }
09  
10     public class data
11     {
12         public string displayname = string.empty;
13     }
14  
15     class program
16     {
17         static void main(string[] args)
18         {            
19             user[] userarray = new user[2];
20  
21             userarray[0] = new user();
22             userarray[0].lastname = "chou";
23             userarray[0].firstname = "clark";
24  
25             userarray[1] = new user();
26             userarray[1].lastname = "aaaa";
27             userarray[1].firstname = "bbbbb";
28  
29  
30             ienumerable<data> datalist = createdatalist(userarray, "★★★★★");
31             foreach (data data in datalist)
32             {
33                 console.writeline(data.displayname);
34             }
35             console.writeline("");
36              
37  
38             console.writeline("end");
39             console.readline();
40         }
41  
42         static ienumerable<data> createdatalist(ienumerable<user> userlist, string decorator)
43         {
44             return new castingenumerable<data, user>(userlist, delegate(user user) { return createdata(user, decorator); });
45         }
46  
47         static data createdata(user user, string decorator)
48         {
49             data data = new data();
50             data.displayname = decorator + user.lastname + "." + user.firstname + decorator;
51             return data;
52         }
53     }  
54 }

程式碼 :
view source
 

01 namespace clk.collections
02 {
03     public class castingenumerable<tresult, tsource> : ienumerable<tresult>
04     {
05         //properties 
06         private readonly ienumerable<tsource> _sourceenumerable;
07  
08         private castingenumerabledelegate<tresult, tsource> _enumerabledelegate;
09  
10  
11         // construction 
12         public castingenumerable(ienumerable<tsource> sourceenumerable, castingenumerabledelegate<tresult, tsource> enumerabledelegate)
13         {
14             #region require
15  
16             if (sourceenumerable == null) throw new argumentnullexception();
17             if (enumerabledelegate == null) throw new argumentnullexception();
18  
19             #endregion
20             _sourceenumerable = sourceenumerable;
21             _enumerabledelegate = enumerabledelegate;
22         }
23  
24  
25         // member 
26         public ienumerator<tresult> getenumerator()
27         {
28             return new castingenumerator<tresult, tsource>(_sourceenumerable.getenumerator(), _enumerabledelegate);
29         }
30  
31         system.collections.ienumerator system.collections.ienumerable.getenumerator()
32         {
33             return this.getenumerator();
34         }
35     }
36 }

view source
 

01 namespace clk.collections
02 {
03     public class castingenumerator<tresult, tsource> : ienumerator<tresult>
04     {
05         //properties 
06         private readonly ienumerator<tsource> _sourceenumerator;
07  
08         private readonly castingenumerabledelegate<tresult, tsource> _enumerabledelegate;
09  
10         private tresult _currentresult = default(tresult);
11  
12  
13         // construction 
14         public castingenumerator(ienumerator<tsource> sourceenumerator, castingenumerabledelegate<tresult, tsource> enumerabledelegate)
15         {
16             #region require
17  
18             if (sourceenumerator == null) throw new argumentnullexception();
19             if (enumerabledelegate == null) throw new argumentnullexception();
20  
21             #endregion
22             _sourceenumerator = sourceenumerator;
23             _enumerabledelegate = enumerabledelegate;
24         }
25  
26         public virtual void dispose()
27         {
28             _sourceenumerator.dispose();
29             _currentresult = default(tresult);
30         }
31  
32  
33         // member  
34         public tresult current
35         {
36             get
37             {
38                 return _currentresult;
39             }
40         }
41  
42         object system.collections.ienumerator.current
43         {
44             get
45             {
46                 return this.current;
47             }
48         }
49  
50         public bool movenext()
51         {
52             if (_sourceenumerator.movenext() == true)
53             {
54                 _currentresult = _enumerabledelegate(_sourceenumerator.current);
55                 return true;
56             }
57             return false;
58         }
59  
60         public void reset()
61         {
62             _sourceenumerator.reset();
63             _currentresult = default(tresult);
64         }
65     }
66 }

view source
 

1 public delegate tresult castingenumerabledelegate<tresult, tsource>(tsource source);

 


摘自 昏睡領域

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网