【问题标题】:C# explicit conversion operatorsC# 显式转换运算符
【发布时间】:2015-05-10 13:47:56
【问题描述】:

您好,我需要一些帮助 :) 我有我的自定义类过滤器,并在其中定义了显式转换运算符以从 AForge.Point 转换为 System.Drawing.PointF AForge.Point 和 System.Drawing.PointF 都是来自库的结构。 blob.CenterOfGravity 是 AForge.Point 的类型。问题是 intelisense 告诉我“无法将 'AForge.Point' 转换为 'System.Drawing.PointF'。我不知道为什么无法完成此转换:/。感谢所有回复。

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;
        }
        ...
}

【问题讨论】:

  • 首先,您的显式运算符不会编译。您不能在另一个类中添加显式转换运算符。它应该是其中一种类型。

标签: c# explicit-conversion


【解决方案1】:

您不能使用operator 执行此操作,因为这些必须由您正在转换的类型(即AForge.PointSystem.Drawing.PointF)定义。根据documentation

要转换的参数的类型或转换结果的类型,但不能同时是两者,必须是包含类型。

另一种方法是为AForge.Point 定义扩展方法:

public static class PointExtensions
{
    public static PointF ToPointF(this AForge.Point source)
    {
        return new PointF(source.X, source.Y);
    }
}

并像这样使用:

PointF cog = blob.CenterOfGravity.ToPointF();

【讨论】:

  • 你比我早了 15 秒!
  • 感谢您的回复 :) 我现在明白了。
【解决方案2】:

你可以试试这个

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);
    }

【讨论】:

  • 谢谢,我知道可以这样解决,但我很好奇为什么我的解决方案不起作用。
猜你喜欢
  • 2017-02-14
  • 1970-01-01
  • 2010-10-27
  • 2013-08-25
  • 2012-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多