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

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(使用前将#替换为@)

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

  • 防止控制台应用程序中的内存工作集最小化?

    我想防止控制台应用程序中的内存工作集最小化 在Windows应用程序中 我可以这样做覆盖 SC MINIMIZE 消息 http support microsoft com kb 293215 en us fr 1 但是 如何在控制台应用程
  • Makefile 和 .Mak 文件 + CodeBlocks 和 VStudio

    我对整个 makefile 概念有点陌生 所以我对此有一些疑问 我正在 Linux 中使用 CodeBlocks 创建一个项目 我使用一个名为 cbp2mak 的工具从 CodeBlocks 项目创建一个 make 文件 如果有人知道更好的
  • if constexpr 中的 not-constexpr 变量 – clang 与 GCC

    struct A constexpr operator bool const return true int main auto f auto v if constexpr v A a f a clang 6 接受该代码 GCC 8 拒绝它
  • JavaScript 错误:MVC2 视图中的条件编译已关闭

    我试图在 MVC2 视图页面中单击时调用 JavaScript 函数 a href Select a JavaScript 函数 function SelectBenefit id code alert id alert code 这里 b
  • Unity手游触摸动作不扎实

    我的代码中有一种 错误 我只是找不到它发生的原因以及如何修复它 我是统一的初学者 甚至是统一的手机游戏的初学者 我使用触摸让玩家从一侧移动到另一侧 但问题是我希望玩家在手指从一侧滑动到另一侧时能够平滑移动 但我的代码还会将玩家移动到您点击的
  • Libev,如何将参数传递给相关回调

    我陷入了 libev 中争论的境地 通常 libev 在类似的函数中接收包 接收回调 没关系 但是实际操作中 我们需要派遣一个亲戚 写回调 根据收到的包裹处理具体工作 例如 S RECV MSG pstRecvMsg S RECV MSG
  • Linux 上的 RTLD_LOCAL 和dynamic_cast

    我们有一个由应用程序中的一些共享库构成的插件 我们需要在应用程序运行时更新它 出于性能原因 我们在卸载旧插件之前加载并开始使用新插件 并且只有当所有线程都使用旧插件完成后 我们才卸载它 由于新插件和旧插件的库具有相同的符号 我们dlopen
  • 保证复制省略是否适用于函数参数?

    如果我理解正确的话 从 C 17 开始 这段代码现在要求不进行任何复制 Foo myfunc void return Foo auto foo myfunc no copy 函数参数也是如此吗 下面的代码中的副本会被优化掉吗 Foo myf
  • wordexp 失败时我们需要调用 wordfree 吗?

    wordexp 失败时我们需要调用 wordfree 吗 在某些情况下 调用 wordfree 似乎会出现段错误 例如 当 wordfree 返回字符串为 foo bar 的错误代码时 这在手册页中并不清楚 我已经看到在某些错误情况下使用了
  • 在 azure blob 存储中就地创建 zip 文件

    我将文件存储在 Blob 存储帐户内的一个容器中 我需要在第二个容器中创建一个 zip 文件 其中包含第一个容器中的文件 我有一个使用辅助角色和 DotNetZip 工作的解决方案 但由于 zip 文件的大小最终可能达到 1GB 我担心在进
  • 如何从 Boost.PropertyTree 复制子树

    我有一些boost property tree ptree 我需要树来删除一些具有特定标签名称的元素 例如 xml 表示源ptree如下
  • 如何将项目插入到特定索引处的空数组中?

    我想将一个项目插入到空数组的指定索引中 我看到有 Array prototype splice 方法 但是 如果我在空数组上使用 splice 它只会添加项目来结束数组 如下所示 var a a splice 3 0 item 3 cons
  • 使用 gcc 时在头文件中查找定义的好方法是什么?

    在使用 gcc 时 有人有推荐的方法在头文件中查找定义吗 使用 MSVC 时 我只需右键单击并选择 转到定义 这非常好 我使用过 netbeans gcc 它确实有代码帮助 包括到定义的超链接 所以这是一种选择 但是 我想知道是否有任何其他
  • C++ 指针引用混淆

    struct leaf int data leaf l leaf r struct leaf p void tree findparent int n int found leaf parent 这是 BST 的一段代码 我想问一下 为什么
  • 如何高效计算连续数的数字积?

    我正在尝试计算数字序列中每个数字的数字乘积 例如 21 22 23 98 99 将会 2 4 6 72 81 为了降低复杂性 我只会考虑 连续的数字 http simple wikipedia org wiki Consecutive in
  • 如何从 Windows Phone 7 模拟器获取数据

    我有一个 WP7 的单元测试框架 它在手机上运行 结果相当难以阅读 因此我将它们写入 XDocument 我的问题是 如何才能将这个 XML 文件从手机上移到我的桌面上 以便我可以实际分析结果 到目前为止 我所做的是将 Debugger B
  • 如何获取带有某个属性注释的所有属性?

    我刚刚从 Roslyn 开始 我想找到所有用属性名称 OneToOne 注释的属性 我启动了 SyntaxVisualizer 并能够获取对该节点的引用 但我想知道是否有更简单的方法来实现此目的 这就是我所拥有的 var prop docu
  • 如何组合两个 lambda [重复]

    这个问题在这里已经有答案了 可能的重复 在 C 中组合两个 lambda 表达式 https stackoverflow com questions 1717444 combining two lamba expressions in c
  • 如何使用通配符模拟泛型方法的行为

    我正在使用 EasyMock 3 2 我想基于 Spring Security 为我的部分安全系统编写一个测试 我想嘲笑Authentication http docs spring io autorepo docs spring secu
  • 如何在 C# 中获取 CMD/控制台编码

    我需要指定正确的代码页来使用 zip 库打包文件 正如我所见 我需要指定控制台编码 在我的例子中为 866 C Users User gt mode Status for device CON Lines 300 Columns 130 K

随机推荐

  • 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