首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# 键值对,一个键,两个值!解决办法

2014-01-08 
C# 键值对,一个键,两个值!经常使用到Dictionary!但是很多情况,我需要两个值,或者多个值!而且又不想写实体!

C# 键值对,一个键,两个值!
经常使用到Dictionary!但是很多情况,我需要两个值,或者多个值!而且又不想写实体!

于是纠结,很纠结!真心不想写实体!

于是自己写了个!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace HSERP.WMS.Entity.SysCfg
{
    /// <summary>
    /// 自定义键值对
    /// </summary>
    /// <typeparam name="B">键</typeparam>
    /// <typeparam name="J">值</typeparam>
    /// <typeparam name="F">值</typeparam>
    [Serializable]
    public class SuperDictionary<B, J, F>
    {
        public int Count = 0;
        public List<B> Keys = new List<B>();
        public List<MyValue<J, F>> Values = new List<MyValue<J, F>>();

        #region 构造方法
        public SuperDictionary()
        {

        }
        #endregion

        #region 根据键返回值
        /// <summary>
        /// 查询或添加
        /// </summary>
        /// <param name="b">键</param>
        /// <returns></returns>
        public MyValue<J, F> this[B b]
        {
            get
            {
                int i = Keys.IndexOf(Keys.First(a => a.Equals(b)));
                return Values[i];
            }
            set
            {
                MyValue<J, F> mv = value as MyValue<J, F>;
                int i = Keys.IndexOf(Keys.First(a => a.Equals(b)));
                Values[i] = mv;
            }
        }
        #endregion

        #region 添加值
        /// <summary>
        /// 添加
        /// </summary>
        /// <param name="b">键</param>
        /// <param name="j">值</param>
        /// <param name="f">值</param>
        public void Add(B b, J j, F f)
        {
            Keys.Add(b);
            MyValue<J, F> mv = new MyValue<J, F>();
            mv.MyJ = j;
            mv.MyF = f;
            Values.Add(mv);
            Count++;
        }
        #endregion

        #region 删除
        public void Remove(B b)
        {
            int i = Keys.IndexOf(Keys.First(a => a.Equals(b)));
            Values.RemoveAt(i);
        }
        #endregion
    }
    [Serializable]
    public class MyValue<J,F>
    {
        private J _MyJ;



        public J MyJ
        {
            get { return _MyJ; }
            set { _MyJ = value; }
        }

        private F _MyF;

        public F MyF
        {
            get { return _MyF; }
            set { _MyF = value; }
        }
    }
}



请大家帮忙优化一下,现在是两个值的,最好能多个值!很纠结的地方,返回值我不能返回两个,只能用MyValue<J,F>。。也是实体。。。(我喜欢直接能点出来的感觉)
[解决办法]
元组一般情况可以解决一部分问题。

Dictionary<int, Tuple<string, int>> vals = new Dictionary<int, Tuple<string, int>>();
            vals.Add(1,new Tuple<string,int>("hello",1));

[解决办法]
Dictionary<T1,List<object>>可以解决你的任何问题

热点排行