2015-05-10 2 views
2

Здравствуйте, мне нужна помощь :) У меня есть свой собственный класс Фильтры и внутри него Я определил явный оператор преобразования для преобразования из AForge.Point в System.Drawing.PointF как AForge.Point, так и System.Drawing .PointF - это структуры из библиотек. blob.CenterOfGravity - это тип AForge.Point. Проблема в том, что intelisense говорит мне, что «Невозможно преобразовать« AForge.Point »в« System.Drawing.PointF ». Я не знаю, почему это преобразование невозможно: /. Спасибо за все ответы.Операторы явного преобразования C#

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

Прежде всего вашего явного оператора не будет компилироваться. Вы не можете добавить явный оператор преобразования в другой класс. Он должен быть в одном из типов. –

ответ

4

вы не можете сделать это с помощью operator как они должны быть определены типы вы преобразовательных (т.е. AForge.Point или System.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(); 
+0

Вы избили меня до 15 секунд! – CoderDennis

+0

Спасибо за ваши ответы :) Я получаю это сейчас. – Filus1025

0

U может попробовать этот

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

Спасибо, я знал, что это можно решить таким образом, но мне было любопытно, почему мое решение не работает. – Filus1025

 Смежные вопросы

  • Нет связанных вопросов^_^