gpt4 book ai didi

c# - 添加结构 : Interface to a List

转载 作者:太空狗 更新时间:2023-10-29 22:58:28 25 4
gpt4 key购买 nike

我需要将结构作为列表中的值类型传递。假设我有一个从接口(interface)派生的结构:

interface IFoo
{
...
}
struct Foo1 : IFoo { ... }
struct Foo2 : IFoo { ... }

//Some other class which contains this:
List<IFoo> listOfFoo;

我知道我是不是这样做的:IFoo foo = new Foo1() ,它会将值转换为引用(装箱)。

  1. 如果我添加 Foo1,结构不会作为引用传递吗?或 Foo2List<IFoo> ?
  2. 如果不是,这样做安全吗List<object>并且只添加这些结构,还是在类上执行 MemberwiseClone 会更好?

我也在寻找效率,因为这将用于瓦片 map 中的碰撞检测。

最佳答案

  1. 结构将被装箱。他们为什么不呢? List<IFoo> 中的每个值必须是 IFoo ,因此您添加的每个结构实例都会通过装箱进行转换。

  2. 因为 object 结构仍然被装箱也是引用类型。在您的场景中,除非您将列表声明为特定值类型( List<Foo1>List<Foo2> ),否则根本无法避免装箱。

一般来说,使用结构来“提高效率”根本不是一件简单或显而易见的事情。特别是,简单地插入 struct你会在哪里写 class不能保证使您的代码性能更好。首先以明显的方式编写您的代码(这里明显的意思是:使用类),然后确定(通过分析)是否需要优化它,如果需要,如何优化。

关于c# - 添加结构 : Interface to a List<Interface>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28483014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com