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

标签 c# list struct interface

我需要将结构作为列表中的值类型传递。 假设我有一个从接口(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/

相关文章:

c++ - 带有列表容器的优先级队列

go - 简单如果不工作 go 模板

database - 如何解决 go 编程语言中的数据库结构问题?

c# - 如何将带有日期和时间的字符串转换为 DateTime 数据类型?

c# - 带有自己的元组的字典

java - 比较列表中对象的属性

java - 将列表中的值输入 sparql 查询

c - C 标准对指向结构的指针及其第一个成员有何规定?

c# - OpenXml:将 XElement 转换为 OpenXmlElement

c# - 在非泛型类 C# 中包装泛型类