具有多种不同类型的值列表/数组
本文关键字:列表 数组 同类型 | 更新日期: 2023-09-27 18:33:55
我需要暂时在列表或数组中存储多个值。这些值是多种类型,如字符串、整数、日期时间等。
我有两个选择:
选项 1:
声明一个对象类型的数组,如下所示:
object[] values;
选项 2:
为接口声明数组,并为要保存的每种类型实现自己的类。
interface IType
{
}
IType[] values;
class StringValue : IType
{
public string StringValue { get; set; } // not declared in interface!
}
class IntValue : IType
{
public int IntValue { get; set; } // not declared in interface!
}
问题:
每个实施选项的性能优势和/或影响是什么?据我所知(或查询),boxinq 在使用 object[]
时对性能有影响。
选项二呢?至少使用 StringValue
或IntValue
属性需要更多的代码,必须确定第一个类型,IType
必须强制转换为 StringValue 或 IntValue 等......
使用object[]
对性能的影响是否如此之大,以至于我真的应该考虑选项 2 之类的东西?
你提出的类IntValue
本质上是一个整数...它将其封装在一个对象中,以便它可以参与对象[]。 我预计这种情况不会提高性能,并且根据您的实现,它可能比编译器实现的装箱更糟糕。
话虽如此,我同意评论者的观点,即您的努力可能更专注于改进代码的其他领域。 在极少数情况下,拳击开销将是最重要的关注领域。
我确实遇到过一个场景(处理许多可能是整数、浮点数或双精度的数字),其中拳击对用户体验很重要。 我使用表达式树解决了这个问题。
我认为对
性能的影响不大。如果使用对象 [] _objects,用于查找对象类型的反射可能会稍微减慢速度。这。GetType() 函数。