C# 使用隐式运算符对两个类进行类型转换

C# 使用隐式运算符对两个类进行类型转换,c#,type-conversion,operator-keyword,C#,Type Conversion,Operator Keyword,我有一个自定义类,MyClass,它上面有一个隐式类型转换运算符,用于提供到Vector3类型的转换: public static implicit operator Vector3(MyClass v) => new Vector3(1, 2, 3); //Example 但是,当我尝试应用此功能时,它会失败,并显示以下消息: 无法从“System.Collections.Generic.List”转换为“System.Collections.Generic.IEnumerable”

我有一个自定义类,
MyClass
,它上面有一个隐式类型转换运算符,用于提供到
Vector3
类型的转换:

public static implicit operator Vector3(MyClass v) => new Vector3(1, 2, 3); //Example
但是,当我尝试应用此功能时,它会失败,并显示以下消息:

无法从“System.Collections.Generic.List”转换为“System.Collections.Generic.IEnumerable”

例如:

List result=newlist{new MyClass(),new MyClass(),new MyClass()};
列表2=新列表(结果);
也就是说,我可以通过执行以下操作来实现这一点:

List<Vector3> list3 = result.ConvertAll(
new Converter<MyClass, Vector3>( delegate(MyClass v) { return v; } )); 
List list3=result.ConvertAll(
新的转换器(委托(MyClass v){return v;}));
或者,或者:

List<Vector3> list4 = new List<Vector3>();
for each(MyClass v in result) { list4.Add(v); }
List list4=新列表();
对于每个(结果中的MyClass v){list4.Add(v);}

为什么隐式转换运算符在这种情况下无法工作?

您能解释一下这段代码应该做什么吗?MyClass的定义是什么?如何将它转换成矢量3——三维空间中矢量的表示形式?不要认为MyClass做了什么都无关紧要。想法是:它应该被转换成Vector3,其中包含一些值。它实际上在清单3和清单4中有,但在清单2中没有<代码>结果。?你不能做你想做的事。你已经找到了解决办法。另一个是linq的
Select
,带有显式强制转换。
Cast
方法也无能为力you@OlivierRogier使用显式强制转换进行选择。它将调用隐式运算符,但OP需要显式。不过,它们可能能够指定类型参数,但这几乎是一样的
List<Vector3> list4 = new List<Vector3>();
for each(MyClass v in result) { list4.Add(v); }