C# явные операторы преобразования

Здравствуйте, мне нужна помощь:) У меня есть свой собственный класс Filters, и внутри него я определил явный оператор преобразования для преобразования из 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;
        }
        ...
}

2 ответа

Решение

Вы не можете сделать это с помощью operator поскольку они должны определяться типами, которые вы конвертируете (т.е. AForge.Point или же System.Drawing.PointF). Согласно документации:

Тип аргумента, который нужно преобразовать, или тип результата преобразования, но не оба, должны быть содержащими типом.

Одна альтернатива состоит в том, чтобы определить метод расширения для 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();

Ты мог попробовать это

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);
    }
Другие вопросы по тегам