C#将隐含的转换添加到现有类型

Erg*_*wun 8 c# implicit-conversion

C#中是否有一种方法可以将隐式转换添加到已在其他程序集中定义的类型中?

例如,如果我使用两种不同的组件,每个提供自己的Vector3 struct,并在他们的API使用它,这将是很好的能够一次定义转换,然后只传递一个Foo.Vector3给需要一个方法Bar.Vector3,并有它会自动转换.

如果我有库的源,那么我可以添加隐式转换运算符.如果没有这个来源,我现在每次都使用辅助函数明确地进行转换.我希望有一个更好的方式.

我意识到我可以创建自己Vector3 struct的隐式转换运算符与其他两个结构,但这不会解决我想直接将一个(外部定义)类型的对象传递给期望另一个的方法的所有情况.

额外的问题:是否有任何库的作者在其API中暴露像Vector3结构这样的东西应该如何促进这方面的易用性?

Bra*_*ith 10

对于您自己编写的任何类型,您可以为第三方类型提供隐式转换,但不能为两个第三方类型之间的隐式转换添加支持.

通过向两种Vector3类型添加扩展方法,您可以稍微改善两种类型之间转换的优雅;

public static Bar.Vector3 ToBarVector3(this Foo.Vector3 foo) {
    return /* instance of Bar.Vector3 */
}

public static Foo.Vector3 ToFooVector3(this Bar.Vector3 bar) {
    return /* instance of Foo.Vector3 */
}
Run Code Online (Sandbox Code Playgroud)

这是你可以期待达到的最好的.