【idior】.Net2.0的集合操作 --- What i hope?

iDotNetSpace發表於2008-06-16

在.Net1.0中需要自己做Typed Collection,這樣可以把遍歷集合的操作放入集合本身.
可是在.Net2.0中提供了泛型機制,我總不能為了隱藏遍歷集合的操作而復古(自己做Typed Collection)吧.
幸運的是發現.Net2.0。你會發現在.Net2.0的List中提供了ForEach(Action)這麼一個方法.

【idior】.Net2.0的集合操作 --- What i hope? class Program
【idior】.Net2.0的集合操作 --- What i hope?    
{
【idior】.Net2.0的集合操作 --- What i hope?        
static void Main(string[] args)
【idior】.Net2.0的集合操作 --- What i hope?        
{
【idior】.Net2.0的集合操作 --- What i hope?            List
<string> strs = new List<string>();
【idior】.Net2.0的集合操作 --- What i hope?            strs.Add(
"hello");
【idior】.Net2.0的集合操作 --- What i hope?            strs.Add(
"world");
【idior】.Net2.0的集合操作 --- What i hope?
【idior】.Net2.0的集合操作 --- What i hope?            strs.ForEach(Console.WriteLine)
【idior】.Net2.0的集合操作 --- What i hope?        }
【idior】.Net2.0的集合操作 --- What i hope?      
【idior】.Net2.0的集合操作 --- What i hope?    }
【idior】.Net2.0的集合操作 --- What i hope?

怎麼樣? 看不到foreach(string str in strs)這樣的操作了吧.
為什麼要這樣做? 具體原因以及.Net1.0下的實現方法請見here(文章有點長, 耐心點喔, 看完應該有收穫的) 

不過, List對我來說還不夠完美. 它無法實現對集合中滿足特定條件的所有成員做某件事.
也就是提供一個類似於下面這樣的方法:

 

【idior】.Net2.0的集合操作 --- What i hope?ForSpecification(Predicate<T>, Action<T>); 


如果這樣豈不是完美了? 既然做了ForEach為什麼MS不做ForSpecification呢?

現在我要想實現這樣的功能只能用Find(Predicate<T>)方法找出集合中符合條件的元素, 然後再對它進行遍歷。乾脆象.Net1.0下自己實現一個集合操作的輔助類吧. 不過有了泛型的支援,實現方法肯定比以前的簡單很多.不過目的和思想都是一樣的.

【idior】.Net2.0的集合操作 --- What i hope? class Algorithm
【idior】.Net2.0的集合操作 --- What i hope?    
{
【idior】.Net2.0的集合操作 --- What i hope?
【idior】.Net2.0的集合操作 --- What i hope?        
public static void ForSpecification<T>(IEnumerable<T> collection, Action<T> action, Predicate<T> filter)
【idior】.Net2.0的集合操作 --- What i hope?        
{
【idior】.Net2.0的集合操作 --- What i hope?            
foreach (T obj in collection)
【idior】.Net2.0的集合操作 --- What i hope?            
{
【idior】.Net2.0的集合操作 --- What i hope?                
if (filter(obj))
【idior】.Net2.0的集合操作 --- What i hope?                     action(obj);
【idior】.Net2.0的集合操作 --- What i hope?            }
           
【idior】.Net2.0的集合操作 --- What i hope?        }

【idior】.Net2.0的集合操作 --- What i hope?    }


【idior】.Net2.0的集合操作 --- What i hope?class Program
【idior】.Net2.0的集合操作 --- What i hope?    
{
【idior】.Net2.0的集合操作 --- What i hope?        
static void Main(string[] args)
【idior】.Net2.0的集合操作 --- What i hope?        
{
【idior】.Net2.0的集合操作 --- What i hope?            IList
<string> strs = new List<string>();
【idior】.Net2.0的集合操作 --- What i hope?            strs.Add(
"hello");
【idior】.Net2.0的集合操作 --- What i hope?            strs.Add(
"world");
【idior】.Net2.0的集合操作 --- What i hope?            strs.Add(
"hide");
【idior】.Net2.0的集合操作 --- What i hope?
【idior】.Net2.0的集合操作 --- What i hope?            Algorithm.ForSpecification
<string>(
【idior】.Net2.0的集合操作 --- What i hope?                strs,
【idior】.Net2.0的集合操作 --- What i hope?             
   Console.WriteLine,
【idior】.Net2.0的集合操作 --- What i hope?                delegate(string str)
【idior】.Net2.0的集合操作 --- What i hope?                
{
【idior】.Net2.0的集合操作 --- What i hope?                    
//return true;        Hide will be output
【idior】.Net2.0的集合操作 --- What i hope?
                    return str.Contains("o");   //if string contains 'o' then output
【idior】.Net2.0的集合操作 --- What i hope?
                }
);
【idior】.Net2.0的集合操作 --- What i hope?        }
【idior】.Net2.0的集合操作 --- What i hope?      
【idior】.Net2.0的集合操作 --- What i hope?    }


ok? 即使不支援ForEach以及Find方法的集合也可以使用這個輔助類來完成相應的操作.
其實還可以在輔助類中添一些方法,比如讓集合中的元素相加,並返回結果, 留給大家自己實現吧.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-349332/,如需轉載,請註明出處,否則將追究法律責任。

相關文章