字典初始化访问Key值

时间:2015-09-14 07:27:27

标签: c# dictionary initialization

我遇到这种情况:

public Class Device
{
}
public Class Response
{
   Response(Device device){ ... }
}

public class DeviceManager
{

private Dictionary<Device, Response> behaviours = new Dictionary<Device, Behaviour>{
{
new Device, new Response(...here I want the to send current key value !!!... )}
}
}

我可以通过当前的c#语义方式访问密钥的当前值吗?我知道我很懒。

2 个答案:

答案 0 :(得分:4)

您不能在字段初始值设定项中执行此操作。你必须把它放在一个构造函数中:

public class DeviceManager
{
    private Dictionary<Device, Response> behaviours =
        new Dictionary<Device, Behaviour>();

    public DeviceManager()
    {
        Device device = new Device();
        behaviours.Add(device, new Response(device));
    }
}

使用C#6,可以<{1}}使用扩展方法进行

Dictionary<Device, Response>

然后:

public static void Add(
    this Dictionary<Device, Response> dictionary,
    Device device)
{
    dictionary.Add(device, new Response(device));
}

......但我不认为我会这样做。

答案 1 :(得分:0)

因为在这种情况下提供通过查看初始化来理解设备之间线束的方法对我来说非常重要,我最终得到了这个解决方案:

实际上,您可以通过引入各种添加方法告诉Dictionary如何进行初始化:

public class Behaviours:Dictionary<Device, Response>
{
   new public void Add(Device d)
   {
       var r= new response(d);
       (this as Dictionary<Device, Response>).Add(d, r);
   }
}

...

private Behaviours _behaviours = new Behaviours{
  {new Device()},
  {new Device()},
  {new Device()},
}

在实际问题中,设备创建的参数更多,所以通过这种方式我创建了一组行为,可以通过一个外观来理解。