将类型数组转换为通用数组?

2023-12-28

问题的简短版本 - 为什么我不能这样做?我仅限于 .NET 3.5。

T[] genericArray;

// Obviously T should be float!
genericArray = new T[3]{ 1.0f, 2.0f, 0.0f };

// Can't do this either, why the hell not
genericArray = new float[3]{ 1.0f, 2.0f, 0.0f };

更长的版本 -

我在这里使用 Unity 引擎,尽管这并不重要。什么是 - 我试图在其固定 Vector2 (2 个浮点数)和 Vector3 (3 个浮点数)和我的通用 Vector 类之间进行转换。我无法将类型直接转换为通用数组。

using UnityEngine;

public struct Vector<T>
{
    private readonly T[] _axes;

    #region Constructors
    public Vector(int axisCount)
    {
        this._axes = new T[axisCount];
    }

    public Vector(T x, T y)
    {
        this._axes = new T[2] { x, y };
    }

    public Vector(T x, T y, T z)
    {
        this._axes = new T[3]{x, y, z};
    }

    public Vector(Vector2 vector2)
    {
        // This doesn't work
        this._axes = new T[2] { vector2.x, vector2.y };
    }

    public Vector(Vector3 vector3)
    {
        // Nor does this
        this._axes = new T[3] { vector3.x, vector3.y, vector3.z };
    }
    #endregion

    #region Properties
    public T this[int i]
    {
        get { return _axes[i]; }
        set { _axes[i] = value; }
    }

    public T X
    {
        get { return _axes[0];}
        set { _axes[0] = value; }
    }

    public T Y
    {
        get { return _axes[1]; }
        set { _axes[1] = value; }
    }

    public T Z
    {
        get
        {
            return this._axes.Length < 2 ? default(T) : _axes[2];
        }
        set
        {
            if (this._axes.Length < 2)
                return;

            _axes[2] = value;
        }
    }
    #endregion

    #region Type Converters
    public static explicit operator Vector<T>(Vector2 vector2)
    {
        Vector<T> vector = new Vector<T>(vector2);

        return vector;
    }

    public static explicit operator Vector<T>(Vector3 vector3)
    {
        Vector<T> vector = new Vector<T>(vector3);

        return vector;
    }
    #endregion
}

“通用”意味着“与any type".

您的示例代码不是通用的,因为它仅当且仅当T is float.


虽然您无法将 Vector2D 转换为 Vector,但您当然可以将 Vector2D 转换为 Vector。添加一个Convert方法到 Vector2D 或提供一组扩展方法,如下所示:

public static class VectorExtensions
{
    public static Vector<float> ToGenericVector(this Vector2D vector)
    {
        return new Vector<float>(vector.X, vector.Y);
    }

    public static Vector2D ToVector2D(this Vector<float> vector)
    {
        return new Vector2D(vector.X, vector.Y);
    }
}

Usage:

Vector<float> v = new Vector<float>(3, 5);

Vector2D v2 = v.ToVector2D();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将类型数组转换为通用数组? 的相关文章

随机推荐

  • R 返回第一个下划线之后的所有字符

    样本数据 x c AG av08 binloop v6 TL av1 binloopv2 示例尝试 y gsub x 所需样品 WANT c binloop v6 binloopv2 基本上我的目标是提取第一个下划线值之后的所有字符 In
  • 使用变量的 Pandas Sqlite 查询

    使用Python中的sqlite3 如果我想使用变量而不是固定命令进行数据库查询 我可以这样做 name MSFT c execute INSERT INTO Symbol VALUES name 当我尝试使用 pandas 数据框访问 S
  • Action Mailer 模板的优雅降级/渐进增强?

    是否有一些宝石或技术可以让我们只写 html erb我们的 Rails 3 邮件程序的模板 并通过剥离 HTML 标签来优雅地降级它们text plain版本 而不是必须创建每个部分两次 谷歌严重让我失望 所以我一定是搜索了错误的术语 看一
  • 使用ajax和nodejs服务器不会改变会话cookie

    我想在异步请求后更改会话 cookie 但无论我尝试什么 我总是失败 我的要求如下 ajax type POST url setStatus data userId userId token token tokenSecret tokenS
  • 使 sfinae 适用于具有推导返回类型的函数?

    考虑以下代码 Preprocessor include
  • Metro风格从网上加载Js

    我正在 Windows 8 上使用 Visual studio 2012 Ultimate 我正在开发一个 html5 js 地铁风格应用程序 我想从网上动态加载我的js文件 喜欢 但地铁应用程序说 APPHOST9601 无法加载http
  • 使用 Play 框架的 Scala 函数定义中的“Action”一词有何作用?

    我正在开发 Play 应用程序 并且刚刚开始使用 Scala 我看到有这个词Action下面函数中的等号之后和大括号之前 def index Action Ok views html index Hi there 这段代码有什么作用 我见过
  • 默认 XML 命名空间、JDOM 和 XPath

    我想使用 JDOM 读取 XML 文件 然后使用 XPath 从 JDOM 文档中提取数据 它很好地创建了 Document 对象 但是当我使用 XPath 查询 Document 中的元素列表时 我什么也没得到 我的 XML 文档在根元素
  • Java 8 流 API - 是否有标准方法将 Map 中的每个值处理为不同类型?

    I learn Java 8 Lambda 表达式 http docs oracle com javase tutorial java javaOO lambdaexpressions html and 流API http docs ora
  • 更新 Spring 版本后上下文初始化失败

    我最近将 Spring 版本从 3 2 4 RELEASE 更新到 4 0 7 RELEASE 从那时起我在加载上下文时收到此错误 请告诉我在更新 spring 版本后是否需要对 context xml 进行任何更改 这里是复仇者流上下文
  • asm.js 如何处理被零除?

    在 javascript 中 使用 整数 参数除以零的行为就像浮点应该 1 0 Infinity 1 0 Infinity 0 0 NaN asm js 规范规定 带有整数参数的除法返回intish 必须立即强制签名或未签名 如果我们在 j
  • 如何使
    水平布局?

    我正在尝试为我的网站开发一个布局 其中定义列表的元素将水平布局 有点像这样 term 1 term 2 term 3 definition 1 definition 2 definition 3 有人知道如何使用有效的 CSS 使定义列表看
  • 将在 MinGW 7 中使用的 VC Runtime 2017 中 scanf 函数系列的位置

    我在用 VS 2017 MinGW 与 GCC G 7 4 0 基本上发生的事情如下 使用 VS 2017 构建可执行文件 so 是用 GCC 构建的 so 由步骤 1 中创建的可执行文件加载 问题源于MSVCRT MinGW默认情况下链接
  • 本地工作中的 nuget 包

    在我们的产品中 我们有一些项目 几乎每一个都依赖于一个称为 核心 的核心 我们将每个项目作为单独的 nuget 包进行分发 对于部署 我们为其他团队 产品所做的工作 nuget 效果很好 但在我们的本地工作中这确实是一个很大的痛苦 每次 核
  • 使用 WebDriver 和 Ruby 与 JavaScript 下拉菜单交互?

    我正在使用 Ruby 和 Selenium WebDriver 为网页编写自动化 但遇到了网站上某些使用 JavaScript 而不是标准 HTML 制作的下拉菜单的阻塞问题 在这些下拉菜单中 用户可以从下拉菜单中选择一个选项 或者单击它并
  • 在 html5 画布上旋转单个图像(而不是其他图像)?

    我有一个精灵 我正在使用普通精灵表位块传输在 html 画布上制作动画 在某些关键事件上 我想更改精灵的方向 即翻转它或旋转 180 度 而不更改画布上的任何内容 其他精灵 有谁知道如何做到这一点 所以我的游戏遇到了这个问题 我有用于向上
  • 为 MSVC 预构建的 Boost 1.37

    我找不到 Boost 1 37 0 的一组预构建的 MSVC 库 只有源代码 我不明白他们奇怪的构建系统是如何工作的 有什么地方可以找到视觉工作室项目或其他东西的下载吗 The BoostPro 计算 http www boostpro c
  • Django objects.create 产生的输出比应有的要多

    有两个列表 主值
  • Angular 2 中的bundle.js.gz 文件是什么?

    我正在为我的应用程序使用 ng cli 当我运行 ng build prod 时 我得到两个文件 main budle js 和 main bundle js gz 第二个是什么 它有什么好处 服务器和客户端之间的 HTTP 传输几乎总是使
  • 将类型数组转换为通用数组?

    问题的简短版本 为什么我不能这样做 我仅限于 NET 3 5 T genericArray Obviously T should be float genericArray new T 3 1 0f 2 0f 0 0f Can t do t