语言吧技术网欢迎您投稿,程序员的世界我懂你!=====>点此登录投搞
当前位置: 首页 >>ASP.NET >>C#基础 >>C#中KeyValuePair用法

C#中KeyValuePair用法

2019/3/28 11:30:21 0人评论 188次 作者:admin

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

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;

}


CopyRight:2007-2018 语言吧 备案ICP:湘ICP备09009000号-4 http://www.yuyanba.com
欢迎【弗吉尼亚州 】的朋友
内容与素材部分来源于网络,如有侵权请告知删除
分享按钮