Mal*_*lki 4 c# arrays operator-overloading implicit-cast
我有以下类定义了隐式转换运算符:
class A
{
    ...
}
class B
{
    private A m_a;
    public B(A a)
    {
        this.m_a = a;
    }
    public static implicit operator B(A a)
    {
        return new B(a);
    }
}
Run Code Online (Sandbox Code Playgroud)
现在,我可以隐含地将A转换为B.
但为什么我不能隐含地将A []强制转换为B []?
static void Main(string[] args)
{
    // compiles
    A a = new A();
    B b = a;
    // doesn't compile
    A[] arrA = new A[] {new A(), new A()};
    B[] arrB = arrA;
}
Run Code Online (Sandbox Code Playgroud)
谢谢,Malki.
正如Mehrdad Afshari提到的那样,你在运气方面做得不好.你必须明确,它将涉及一个数组副本.值得庆幸的是,您可以使用单行代码:
arrB = arrA.Cast<B>().ToArray();
Run Code Online (Sandbox Code Playgroud)
虽然如果您只想arrB在foreach语句中进行迭代,可以通过省略来避免复制ToArray()
数组协方差仅适用于引用类型和继承层次结构(请注意,它不是表示更改的转换:只是一组具有相同大小的指针解释不同.)它不适用于值类型和用户定义的转换.
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           12683 次  |  
        
|   最近记录:  |