我在参数声明中创建了一些使用嵌套类型参数泛型类型的方法:
public void Foo(IList<Pair<double, IList<double>>> myParameter)
{ // code goes here
}
Run Code Online (Sandbox Code Playgroud)
我想要实现的是强制此方法接受4种类型的变量:
List<Pair<double, List<double>>> myVarList<Pair<double, double[]>> myVarPair<double, List<double>>[] myVarPair<double, double[]>[] myVar但似乎第二个嵌套接口无法通过C#即时转换.在尝试将上面列出的一些变量传递给我的方法时,我收到错误:
参数1:无法从System.Collections.Generic.List <...>转换为无法从System.Collections.Generic.IList转换<...>
我真的需要为此方法创建两个别名来处理此问题吗?或者也许我可以使用某种技巧来克服这个问题?
您的代码会导致差异问题.
即使您最初通过了内部IList<double>也会允许您分配,这会破坏类型安全性.List<double>double[]
(出现这种情况的原因List<Orange>可能与以下情况不同List<Fruit>:您可以将苹果推入其中.)
为了实现正确的方差行为,您必须通过使用IEnumerable<T>s代替IList<T>s 来确保不变性(仅适用于.NET 4.0).
以前版本的C#根本无法处理差异!
| 归档时间: |
|
| 查看次数: |
4432 次 |
| 最近记录: |