Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.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# - Fatal编程技术网

C# 通用方法-参数型铸造

C# 通用方法-参数型铸造,c#,C#,我一直在寻找我的问题的解决方案,但没有明确的答案,所以我不得不在这里问。 以下是我的示例代码: class Geometry { public static Vector2 quadraticCurvePoint(Vector2 _p1, Vector2 _p2, Vector2 _p3, float _t) { return (1 - _t) * (1 - _t) * _p1 + 2 * (1 - _t) * _t * _p2 + _t * _t * _p3;

我一直在寻找我的问题的解决方案,但没有明确的答案,所以我不得不在这里问。 以下是我的示例代码:

class Geometry
{
    public static Vector2 quadraticCurvePoint(Vector2 _p1, Vector2 _p2, Vector2 _p3, float _t)
    {
        return (1 - _t) * (1 - _t) * _p1 + 2 * (1 - _t) * _t * _p2 + _t * _t * _p3;
    }

    public static Vector3 quadraticCurvePoint(Vector3 _p1, Vector3 _p2, Vector3 _p3, float _t)
    {
        return (1 - _t) * (1 - _t) * _p1 + 2 * (1 - _t) * _t * _p2 + _t * _t * _p3;
    }

    public static T[] quadraticCurve<T>(T _p1, T _p2, T _p3, uint _q)
    {
        int points_count = (int)_q + 2;
        T[] points = new T[points_count];
        points[0] = _p1;
        points[points_count - 1] = _p3;
        float ti = 1 / points_count;
        float t;
        for (int i = 1; i <= _q; i++)
        {
            t = ti * i;
            points[i] = quadraticCurvePoint(_p1, _p2, _p3, t);
        }
        return points;
    }
}
类几何
{
公共静态向量2正交曲线点(向量2_p1、向量2_p2、向量2_p3、浮点)
{
返回值(1-\u t)*(1-\u t)*\u p1+2*(1-\u t)*\u t*\u p2+\u t*\u p3;
}
公共静态向量3正交曲线点(向量3_p1、向量3_p2、向量3_p3、浮点)
{
返回值(1-\u t)*(1-\u t)*\u p1+2*(1-\u t)*\u t*\u p2+\u t*\u p3;
}
公共静态T[]二次曲线(T_p1,T_p2,T_p3,uint_q)
{
整数点计数=(整数)整数+2;
T[]点=新的T[points_count];
点[0]=\u p1;
点数[点数-1]=\u p3;
浮点数ti=1/点数;
浮动t;
对于(int i=1;i),使用C语言中的泛型与C++完全不同,编译器不会尝试“猜测”你的意思,你需要明确地告诉它。这是因为C语言中的泛型不只是类的模板,而是在编译时指定的。它们是真实类型。

最好是使用泛型参数约束:

遗憾的是,你不能真正地在操作上使用泛型,而不是在C#中(你不能将静态操作引入到约束泛型类型参数的接口中),所以你要么使用两个重载(我会这样做),要么使用一些讨厌的反射/动力学的东西,我想由于性能下降,“恶劣的反射/动态”不值得实施。感谢您抽出时间。