После того, как я сам столкнулся с этой проблемой при попытке реализовать общий Vector2
на C #, я провел несколько исследований по этой проблеме, также описанных в этом вопросе. :
Менее универсальные дженерики? Возможное решение для арифметики в обобщенных версиях C #
Эти ссылки содержат дополнительную справочную информацию и интересные подходы к решению:
https://jonskeet.uk/csharp/miscutil/usage/genericoperators.html
http: // www.codeproject.com/KB/cs/genericnumerics.aspx
Теперь, когда C # 4.0 вышел с его новым универсальным динамическим
типом, мой вопрос к блестящему сообществу SO: это инструмент это можно было бы использовать, возможно, для создания производительного, универсального вектора / матрицы и т. д. числовые типы?
Очевидно, что Vector2 можно построить просто так:
public struct Vector2
{
public dynamic X;
public dynamic Y;
public Vector2(dynamic x, dynamic y)
{
this.X = x;
this.Y = y;
}
public static Vector2 operator+(Vector2 a, Vector2 b)
{
return new Vector2(a.X + b.X, a.Y + b.Y);
}
}
, но при таком подходе у нас здесь нет ограничений типа, поэтому вы можете создать Vector2 (3, 12.4572)
. Есть ли способ смешать динамические члены с параметром типа Vector2
для выполнения наших математических операций, как это было бы с int
s?
Возможно, некоторая форма Чтобы убедиться, что this.X
является T
, можно использовать приведение, хотя я не знаю, как это сработает.