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()
数组协方差仅适用于引用类型和继承层次结构(请注意,它不是表示更改的转换:只是一组具有相同大小的指针解释不同.)它不适用于值类型和用户定义的转换.