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