是否可以定义如何将内置对象转换为 C# 中的接口?接口不能定义操作符。我有一个非常简单的界面,允许索引访问,但不允许突变:
public interface ILookup<K, V>
{
V this[K key] { get; }
}
我希望能够将 aDictionary<K, V>
转换为ILookup<K, V>
. 在我理想的梦想世界中,这看起来像:
//INVALID C#
public interface ILookup<K, V>
{
static implicit operator ILookup<K, V>(Dictionary<K, V> dict)
{
//Mystery voodoo like code. Basically asserting "this is how dict
//implements ILookup
}
V this[K key] { get; }
}
我制定的解决方法是这样的:
public class LookupWrapper<K, V> : ILookup<K, V>
{
private LookupWrapper() { }
public static implicit operator LookupWrapper<K, V>(Dictionary<K, V> dict)
{
return new LookupWrapper<K, V> { dict = dict };
}
private IDictionary<K, V> dict;
public V this[K key] { get { return dict[key]; } }
}
这行得通,意味着我现在可以直接从 Dictionary 转换为 ILookup,但是男孩感觉很复杂......
有没有更好的方法来强制转换为接口?