Dan*_*iel 5 .net arrays f# covariance
由于.NET数组是协变的,因此以下代码可在C#中工作:
var strArray = new string[0];
object[] objArray = strArray;
Run Code Online (Sandbox Code Playgroud)
在F#中,给定数组,'T[]将其转换为的最佳方法是什么obj[],而无需重新创建数组(例如Array.map box)?我正在使用(box >> unbox),但感觉很草率。
正如Brian所说,并没有什么错box >> unbox,除了数组协方差固有地被破坏(例如,([| "test" |] |> box |> unbox<obj[]>).[0] <- obj()在尝试执行分配时会抛出ArrayTypeMismatchException)。
相反,您可能最好将a string[]视为obj seq,这是绝对安全的(尽管它仍然需要在F#中进行装箱和拆箱,因为F#不支持通用协/反方差)。不幸的是,如果您走这条路线,确实会失去随机访问权限。
box >> unbox
Run Code Online (Sandbox Code Playgroud)
似乎是个好主意; O(1),并且显然完成了这项工作。
还要考虑不要使用这个 CLR 错误功能。;)
| 归档时间: |
|
| 查看次数: |
1115 次 |
| 最近记录: |