将字典<string,class =“”>转换为IDictionary <string,interface =“”> </string,> </string,>

时间:2012-01-27 14:13:08

标签: c# .net

我有一个包含参数字典的类:

public class Parameter : IExecutionParameter, IDesignerParameter
{
}

public interface IExecutionSettings
{
  IDictionary<string, IExecutionParameter> Parameters { get; }
}

public interface IDesignerSettings
{
  IDictionary<string, IDesignerParameter> Parameters { get; }
}

public class Settings : IExecutionSettings, IDesignerSettings
{
  private Dictionary<string, Parameter> _parameters;

  // TODO: Implement IExecutionSettings.Parameters
  // TODO: Implement IDesignerSettings.Parameters
}

我想创建这些接口的显式实现(我知道该怎么做),但我无法弄清楚如何正确地转换字典。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:4)

你不能,因为它不安全。假设您可以将Dictionary<string, MemoryStream>转换为IDictionary<string, IDisposable> - 您可以通过后一个引用将任何 IDisposable值放入字典中,即使实际字典只能容纳MemoryStream - 兼容的引用。

您可能会创建一个只读字典包装器,它会为所有读取委托给基础字典,并在所有写入时失败。然后,您可以将Dictionary<string, Parameter>包装在其中两个“视图”词典中。这会有点痛苦,但可行。在你的情况下,这是否是最合适的方法是另一回事。

也许您应该:

public interface IExecutionSettings
{
    IExecutionParameter this[string key] { get; }
}

public interface IDesignerSettings
{
    IDesignerParameter this[string key] { get; }
}

您可以在Settings内轻松实现这两个(明确)。