C# 键值对,一个键,两个值!

NotNull 2014-01-06 04:48:24
经常使用到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>。。也是实体。。。(我喜欢直接能点出来的感觉)
...全文
1819 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
本拉灯 2014-01-06
  • 打赏
  • 举报
回复 1
引用 2 楼 starfd 的回复:
Dictionary<T1,List<object>>可以解决你的任何问题
就是这样,啥都不用写了。我也常这么干。
  • 打赏
  • 举报
回复
Dictionary<T1,List<object>>可以解决你的任何问题
F_U_C_K_GFW 2014-01-06
  • 打赏
  • 举报
回复
元组一般情况可以解决一部分问题。

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

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧