C#显式转换运算符
你好,我需要帮助:) 我有自己的自定义类过滤器,在其中我定义了显式转换运算符,以便从arge.Point转换为System.Drawing.PointF。arge.Point和System.Drawing.PointF都是库中的结构。重心是一个原点的类型。问题是Intelissense告诉我“无法将'AForge.Point'转换为'System.Drawing.PointF'。我不知道为什么不能进行此转换:/。感谢所有回复C#显式转换运算符,c#,explicit-conversion,C#,Explicit Conversion,你好,我需要帮助:) 我有自己的自定义类过滤器,在其中我定义了显式转换运算符,以便从arge.Point转换为System.Drawing.PointF。arge.Point和System.Drawing.PointF都是库中的结构。重心是一个原点的类型。问题是Intelissense告诉我“无法将'AForge.Point'转换为'System.Drawing.PointF'。我不知道为什么不能进行此转换:/。感谢所有回复 class Filters { public stat
class Filters
{
public static explicit operator System.Drawing.PointF(AForge.Point apoint)
{
return new PointF(apoint.X,apoint.Y);
}
public void DrawData(Blob blob, Bitmap bmp)
{
int width = blob.Rectangle.Width;
int height = blob.Rectangle.Height;
int area = blob.Area;
PointF cog = (PointF)blob.CenterOfGravity;
}
...
}
您不能使用
运算符执行此操作,因为这些必须由您正在转换的类型定义(即a原点
或System.Drawing.PointF
)。根据:
要转换的参数的类型或转换结果的类型(但不能两者都是)必须是包含类型
另一种方法是为一个热点定义一个扩展方法:
public static class PointExtensions
{
public static PointF ToPointF(this AForge.Point source)
{
return new PointF(source.X, source.Y);
}
}
然后像这样使用:
PointF cog = blob.CenterOfGravity.ToPointF();
你可以试试这个
private static System.Drawing.PointF convertToPointF(AForge.Point apoint)
{
return new PointF(apoint.X,apoint.Y);
}
public void DrawData(Blob blob, Bitmap bmp)
{
int width = blob.Rectangle.Width;
int height = blob.Rectangle.Height;
int area = blob.Area;
PointF cog = convertToPointF(blob.CenterOfGravity);
}
首先,你的显式运算符无法编译。你不能在另一个类中添加显式转换运算符。它应该在任何一种类型中。你比我快了15秒!感谢你的回答:)我现在明白了。谢谢,我知道可以用这种方法解决它,但我很好奇为什么我的解决方案不起作用。