• C# KeyValuePair<TKey,TValue>的用法-转载


    C# KeyValuePair<TKey,TValue>的用法。结构体,定义可设置或检索的键/值对。也就是说我们可以通过 它记录一个键/值对这样的值。比如我们想定义一个ID(int类型)和Name(string类型)这样的键/值对,那么可以这 样使用。

    /// <summary>
    /// 设置键/值对
    /// </summary>
    /// <returns></returns>
    private KeyValuePair<int, string> SetKeyValuePair()
    {
        int intKey = 1;
        string strValue = "My value";
        KeyValuePair<int, string> kvp = new KeyValuePair<int, string>(intKey, strValue);
        return kvp;

    /// <summary>
    /// 获得键/值对
    /// </summary>
    private void GetKeyValuePairDemo()
    {
        KeyValuePair<int, string> kvp = SetKeyValuePair();
        int intKey = kvp.Key;
        string strValue = kvp.Value;
    }

    如果想使用泛型的话,也是差不多这样子,一般批量读取数据的时候,当只需要读两个字段(Id and Name)时, 如果想不用Model类,并配合泛型使用KeyValuePair,示例:

    1、从数据库中读取数据

    /// <summary>
    /// 获取所有企业的Id(enterprise_id)及英文名 (enterprise_name_eng)
    /// </summary>
    /// <returns>enterprise_info表中的所有企业 Id及英文名</returns>
    public List<KeyValuePair<long,string>> GetEnterpriseIdAndNameEngList()
    {
        //enterprise_id键和enterprise_name_eng 对
        List<KeyValuePair<long, string>> lstIdKeyNameEngValue = new List<KeyValuePair<long, string>>(); 
        string cmdText = "select enterprise_id, enterprise_name_eng from enterprise_info";
        using (OracleDataReader reader = OracleHelper.ExecuteReader(OracleHelper.OracleConnString, CommandType.Text, cmdText, null)) 
        {
            try
            {
                MyEventLog.Log.Debug ("cmdText= " + cmdText);
                while (reader.Read())
                {
                    KeyValuePair<long, string> idKeyNameEngValue = new KeyValuePair<long, string> (
                   &nbs p;    reader.IsDBNull(0) ? 0 : reader.GetInt64(0), 
                     ;    reader.IsDBNull(1) ? string.Empty : reader.GetString(1) 
                     ;    );
                    lstIdKeyNameEngValue.Add (idKeyNameEngValue);
                } 
                OracleHelper.DataReaderClose(reader);
            } 
            catch (OracleException e) 
            {
                MyEventLog.Log.Error ("cmdText= " + cmdText);
                MyEventLog.Log.Error(e);
                throw e;
            }
        } 
        return lstIdKeyNameEngValue;
    }

    2、在业务中处理数据

    /// <summary>
    /// 函数作用:
    /// 1、返回从待导入的企业名称中获的有效企业Id集。
    /// 2、返回有效的企业行号集。
    /// 3、返回无效的企业行号集。
    /// </summary>
    /// <param name="lstEnterpriseNameEn">待导入的企业名称(英文)集</param>
    /// <param name="lstValidRowsIndex">Excel表中有效的企业Id行集</param>
    /// <param name="lstInvalidRowsIndex">Excel表中无效的企业Id行集</param>
    /// <returns>返回有效的行的索引列表</returns>
    public List<long> PrepareForImport(List<string> lstEnterpriseNameEn, out List<int> lstValidRowsIndex, out List<int> lstInvalidRowsIndex)
    {
        //有效的企业Id行
        lstValidRowsIndex = new List<int>();
        //无效的企业Id行
        lstInvalidRowsIndex = new List<int>();     //获取所有的企业Id及英文名
        List<KeyValuePair<long, string>> lstIdKeyNameEngValue = dal.GetEnterpriseIdAndNameEngList();     //用于存放有效的企业的Id,即如果可以在enterprise_info表中找到此企业的英文名,那么表示此企业存在,因此把存在的企业Id获取出来,存放于此变量
        List<long> lstValidEnterpriseId = new List<long>();     //通过以下循环可以获得可以有效的企业Id列表
        for (int i = 0; i < lstEnterpriseNameEn.Count; i++)
        {
            foreach (KeyValuePair<long, string> kvp in lstIdKeyNameEngValue)
            {
                if (lstEnterpriseNameEn[i] == kvp.Value)
                {
                    //获得有效行索引
                    lstValidRowsIndex.Add(i);                 //获得有效的企业Id
                    lstValidEnterpriseId.Add(kvp.Key);                 //找到了有效的ID后马上跳出内循环,回到外循环
                    continue;
                }
            }         if (!lstValidRowsIndex.Contains(i) && !lstInvalidRowsIndex.Contains(i))
            {
                //取得无效行索引
                lstInvalidRowsIndex.Add(i);
            }
        }
        return lstValidEnterpriseId;
    }

    来源:http://www.cnblogs.com/mayanshuang/archive/2011/06/18/2084406.html

  • 相关阅读:
    一个word小技巧
    Android 自定义组件之 带有悬浮header的listview
    传智播客 java基础 相关资料 Day2
    js取整 摘抄
    ifram子页面父页面相互调用
    寻知图项目收获--项目管理方面
    圣经学习 读经群读经记录(一)申命记5-7章
    java1234教程系列笔记 S1 Java SE chapter 02 写乘法口诀表
    java1234教程系列笔记 S1 Java SE chapter 02 lesson 03 java基本数据类型
    java1234教程系列笔记 S1 Java SE 02 eclipse初步使用、注释、标识符
  • 原文地址:https://www.cnblogs.com/hao-1234-1234/p/6113437.html
Copyright © 2020-2023  润新知