以前在开发中为了对List,String[].Array进行元素的查找一般都是这样做:
List lists = new List();
list.add("111");
.....

for(int i=0;i<list.length;i++)
{
   if(list[i].equals("要查找的元素"))
   {....}
}

其实在C# 2.0对List,Array元素的查找,MS已经提供了一些泛型方法,让Coding人员更好的查找,遍历,等等...
以下是我简单对List的一些操作所写的Demo.供大家参考,以及和大家进行交流。

static void Main(string[] args)
        {
            //Prdicate用法
            //第一种用法:[不创建显式的委托,也不创建指定泛型方法的类型参数]
            ListOneMethod();

            //Prdicate用法
            //第二种用法:[创建显式的委托,也创建指定泛型方法的类型参数]
            ListTwoMethod();

            //第三种用法:[同于第二种方法,但用了两个类进行区分]
            ListThreeMethod();
}

        #region 第一种用法

        private static void ListOneMethod()
        {
            String[] strs = { "WPF", "WCF", "WF", "Author", "WinFx", "Linq" };
            String Name = Array.Find(strs, FindWhere);
            Console.WriteLine("Result: ----------  " + Name + "  ----------");
        }

        public static Boolean FindWhere(String str)
        {
            return str.Equals("Author") ? true : false;
        }

        #endregion

        #region 第二种用法

        private static void ListTwoMethod()
        {
            List<String> strlist = new List<String>();
            strlist.Add("WPF");
            strlist.Add("WCF");
            strlist.Add("WF");
            strlist.Add("Author");
            strlist.Add("WinFx");
            strlist.Add("Linq");

            Predicate<String> FindValues = delegate(String list)
            {
                return list.Equals("WinFx") ? true : false;
            };
            Console.WriteLine("Result: ---FindIndex---  " + strlist.FindIndex(FindValues) + "  ----------");
            Console.WriteLine("Result: ---Exists----  " + strlist.Exists(FindValues) + "  ----------");
            
            List<String> lists = strlist.FindAll(FindValues);
            foreach (string str in lists)
            {
                Console.WriteLine("Result: ---FindAll-----  " + str + "  ----------");
            }

            Console.WriteLine("Result: ---FindLast----  " + strlist.FindLast(FindValues) + "  ----------");
            Console.WriteLine("Result: ---FindLastIndex--  " + strlist.FindLastIndex(FindValues) + "  ----------");
            Console.WriteLine("Result: ---RemoveAll--  " + strlist.RemoveAll(FindValues) + "  ----------");
            Console.WriteLine("Result: ---TrueForAll-  " + strlist.TrueForAll(FindValues) + "  ----------");
        }

        #endregion

        #region 第三种用法

        private static void ListThreeMethod()
        {
            ListClass lists = new ListClass();
            // 使用List.Add()方法來新增集合內容
            lists.Values.Add(new ValueClass("WPF"));
            lists.Values.Add(new ValueClass("WCF"));
            lists.Values.Add(new ValueClass("WF"));
            lists.Values.Add(new ValueClass("Author"));
            lists.Values.Add(new ValueClass("WinFx"));
            lists.Values.Add(new ValueClass("Linq"));

            Predicate<ValueClass> FindValue = delegate(ValueClass obj) { return obj.Value == "Author"; };

            Console.WriteLine("Result: ----------  " + lists.Values.FindIndex(FindValue) + "  ----------");

            Console.WriteLine("將所有資料列出");
            int idx = 0;
            Action<ValueClass> ListAll = delegate(ValueClass obj)
            {
                Console.WriteLine(string.Format("第 {0} 個的Value值為 {1}", idx, obj.Value));
                idx++;
            };
            lists.Values.ForEach(ListAll);
        }

        public class ValueClass
        {
            private string _value = string.Empty;
            public string Value
            {
                get { return _value; }
            }

            public ValueClass(string value)
            {
                _value = value;
            }
        }

        public class ListClass
        {
            private List<ValueClass> _values = new List<ValueClass>();
            public List<ValueClass> Values
            {
                get { return _values; }
            }
            public ListClass() { }
        }

        #endregion

*Predicate 是对方法的委托,如果传递给它的对象与委托中定义的条件匹配,则该方法返回 true。当前 List 的元素被逐个传递给 Predicate 委托,在找到匹配项时停止处理。此方法执行线性搜索;

还有就是有关于List其他的一些查找方法:
1.当需要依条件来寻找集合内的某个类别时, 可用List<T>Find(), List<T>FindLast()来搜寻, 回传搜寻到的类别
2.当需要依条件来寻找集合内的某些类别时, 可用List<T>FindAll()来搜寻, 将回传一个新的List<T>对象集合
3.当需要依条件来寻找集合内的某个类别的索引值时, 可用List<T>FindIndex(), List<T>FindLastIndex()
4.List<T>Find(), List<T>FindLast()的不同是, List<T>Find()由Index=0开始寻找, 而List<T>FindLast()由Index = List<T>.Count - 1开始寻找
同理, List<T>FindIndex(), List<T>FindLastIndex()也是一样, 不同的是, 这两个回传的是索引值
5.当使用List<T>Find()相关函示时, 必须delegate.这个Predicate<T>
其内容就是搜寻的判断式, 如:

Predicate<class1> FindJaofeng = delegate(class1 obj) {
  return obj.Value == "Jaofeng";
};

return type为boolean值
而上面也有介绍一个List<T>.ForEach(), 这个Method只是将原本我们用foreach()的方式, 简化而已
譬如原本的习惯写法:
foreach (class1 cls in myText.Values) {
    //  Do something
}
// 现在变成
Action<class1> ActionName = delegate(class1 obj) {
    //  Do something
};
myText.Values.ForEach(ActionName);
查找DropDownList中的Item的
ListItemCollection items = DisplayModeDropdown.Items;

查找 Index:
    int selectedIndex = items.IndexOf(items.FindByText("需要查找匹配的item"));

查找 Value:
    string selectedValue = items.FindByText("需要查找匹配的item");

List 泛型 集合中 Find 的用法的更多相关文章

  1. C# List泛型集合中的GroupBy<>用法

    //根据子项目id得到flowjump实体类 flowJumps = this.FlowJumps; //按工序groupby flowjumps IEnumerable<IGrouping&l ...

  2. C#中DataTable与泛型集合互转(支持泛型集合中对象包含枚举)

    最近在做WCF,因为是内部接口,很多地方直接用的弱类型返回(DataSet),这其实是一种非常不好的方式,最近将项目做了修改,将所有接口返回值都修改成强类型,这样可以减少很多与客户端开发人员的沟通,结 ...

  3. C# 找出泛型集合中的满足一定条件的元素 List.Wher()

    在学习的过程中,发现泛型集合List<T>有一个Where函数可以筛选出满足一定条件的元素,结合Lambda表达式使用特别方便,写出来与大家分享. 1.关于Func<> Fun ...

  4. 泛型集合List的详细用法

    命名空间:   System.Collections.Generic List<T>类是 ArrayList 类的泛型等效类.    该类使用大小可 按需动态增加 的数组实现 IList& ...

  5. Java集合中List的用法

    List接口是Collection接口的子接口,List有一个重要的实现类--ArrayList类,List中的元素是有序排列的而且可重复,所以被称为是序列. List可以精确的控制每个元素的插入位置 ...

  6. C#中泛型容器Stack<T>的用法,以及借此实现”撤销/重做”功能

    .Net为我们提供了众多的泛型集合.比如,Stack<T>先进后出,Queue<T>先进先出,List<T>集合元素可排序,支持索引,LinkedList<T ...

  7. C# Synchronized 和 SyncRoot 实现线程同步的源码分析及泛型集合的线程安全访问

    转载:http://blog.csdn.net/zztfj/article/details/5640889 Synchronized vs SyncRoot 我们知道,在.net的一些集合类型中,譬如 ...

  8. C# DataSet装换为泛型集合

    1.DataSet装换为泛型集合(注意T实体的属性其字段类型与dataset字段类型一一对应) #region DataSet装换为泛型集合 /// <summary> /// 利用反射和 ...

  9. C#泛型集合之Dictionary<k, v>使用技巧

    1.要使用Dictionary集合,需要导入C#泛型命名空间 System.Collections.Generic(程序集:mscorlib) 2.描述 1).从一组键(Key)到一组值(Value) ...

随机推荐

  1. IOS零碎技术整理(3)-获取wifi列表

    1.   该功能实现基于MobileApple80211框架来进行开发,而目前该框架成为了私有框架,其中的API均为私有API. 如果使用这些API可能导致应用不能上app store或者ios版本升 ...

  2. javascript工具函数

    第一部分 JavaScript工具函数 转义特殊字符为html实体   HtmlEncode: function(str){ return str.replace(/&/g, '&') ...

  3. Sqlite小数作差,会减不尽?

    select 6307.65-5922.68 from CW_ZWMX 以上语句,在设Navigate中执行的结果是:384.969999999999 不解!!!

  4. 黄聪:路由器WIFI连接无法正常访问个别网站及发送图片

    打开路由,路由默认MTU是1500,改成1472 就解决了

  5. Hibernate5.2之QBC查询

                                                         Hibernate5.2值QBC查询 一.简介  Hibenate的QBC查询个人认为是Hib ...

  6. git学习1:git安装和配置

    Git是什么?世界上最先进的分布式版本控制系统,记录了一个文本文件的每次一修改信息,比如,一篇散文,从草稿到最终出版,经历过无数次修改,修改了标点符号形成一个版本,老师帮助修改形成一个版本,同学帮忙修 ...

  7. 也说php从mysql数据库通过服务器端json返回数据出现乱码问题

    我最近需要用js和json与mysql数据库做一个两级联动的下拉菜单,发现当从数据库中返回的是中文时客户端会出现乱码问题,经过在百度上查找终于找到了解决办法如下: while($row=$MySqlc ...

  8. web应用虚拟目录的映射

    1.新建一个web应用.在D盘新建一个news文件夹,文件夹下面新建一个html文件.如下图所示: 2.将web应用映射到服务器的虚拟目录 第一种方式: 2.1 用记事本打开tomcat目录下面的se ...

  9. mysql connector 和 sqlserver ado.net 的区别

    1,虽然同样是实现了IDataReader接口,但是 对于 MySql.Data.MySqlClient.MySqlDataReader  和 System.Data.SqlClient.SqlDat ...

  10. 使用Spring配合Junit进行单元测试的总结

    最近公司的项目和自己的项目中都用到了spring集成junit进行单元测试,总结一下几种基本的用法: 1.直接对spring中注入的bean进行测试(以DAO为例): 在测试类上添加@RunWith注 ...