C#向现有类型添加隐式转换

C#向现有类型添加隐式转换,c#,implicit-conversion,C#,Implicit Conversion,在C#中是否有方法将隐式转换添加到其他程序集中已定义的类型 例如,如果我使用两个不同的程序集,每个程序集都提供自己的Vector3结构,并在它们的API中使用它,那么最好能够定义一次转换,然后将Foo.Vector3传递给需要Bar.Vector3的方法,并将其自动转换为 如果我有库的源代码,那么我可以添加隐式转换操作符。没有这个源代码,我现在每次都用一个helper函数显式地进行转换。我希望有更好的方法 我意识到我可以创建自己的Vector3结构,并使用隐式转换运算符与其他两个结构进行转换,但

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

例如,如果我使用两个不同的程序集,每个程序集都提供自己的
Vector3结构
,并在它们的API中使用它,那么最好能够定义一次转换,然后将
Foo.Vector3
传递给需要
Bar.Vector3
的方法,并将其自动转换为

如果我有库的源代码,那么我可以添加隐式转换操作符。没有这个源代码,我现在每次都用一个helper函数显式地进行转换。我希望有更好的方法

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


额外问题:在API中公开Vector3结构之类的东西的库的作者是否应该做些什么来简化这方面的使用?

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

通过向两种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 */
}

这大概是您可以期望达到的最佳效果。

不幸的是,您无法添加隐式转换来转换无法更改的类型。我会推荐您提到的解决方法,但您已经提到:)


恐怕连你奖金问题的答案都是“你不能”。

分机操作员。。我喜欢:)