Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#显式转换运算符_C#_Explicit Conversion - Fatal编程技术网

C#显式转换运算符

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

你好,我需要帮助:) 我有自己的自定义类过滤器,在其中我定义了显式转换运算符,以便从arge.Point转换为System.Drawing.PointF。arge.Point和System.Drawing.PointF都是库中的结构。重心是一个原点的类型。问题是Intelissense告诉我“无法将'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;
        }
        ...
}

您不能使用
运算符执行此操作,因为这些必须由您正在转换的类型定义(即
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秒!感谢你的回答:)我现在明白了。谢谢,我知道可以用这种方法解决它,但我很好奇为什么我的解决方案不起作用。