将 Dictionary<string, class> 转换为 IDictionary<string, interface>

Mar*_*ski 3 .net c#

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

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
}
Run Code Online (Sandbox Code Playgroud)

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

任何帮助将不胜感激。

Jon*_*eet 5

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

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

也许你应该有:

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

public interface IDesignerSettings
{
    IDesignerParameter this[string key] { get; }
}
Run Code Online (Sandbox Code Playgroud)

您可以在Settings.