具有多种不同类型的值列表/数组

本文关键字:列表 数组 同类型 | 更新日期: 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[] 时对性能有影响。

选项二呢?至少使用 StringValueIntValue属性需要更多的代码,必须确定第一个类型,IType必须强制转换为 StringValue 或 IntValue 等......

使用object[]对性能的影响是否如此之大,以至于我真的应该考虑选项 2 之类的东西?

具有多种不同类型的值列表/数组

你提出的类IntValue本质上是一个整数...它将其封装在一个对象中,以便它可以参与对象[]。 我预计这种情况不会提高性能,并且根据您的实现,它可能比编译器实现的装箱更糟糕。

话虽如此,我同意评论者的观点,即您的努力可能更专注于改进代码的其他领域。 在极少数情况下,拳击开销将是最重要的关注领域。

我确实遇到过一个场景(处理许多可能是整数、浮点数或双精度的数字),其中拳击对用户体验很重要。 我使用表达式树解决了这个问题。

我认为对

性能的影响不大。如果使用对象 [] _objects,用于查找对象类型的反射可能会稍微减慢速度。这。GetType() 函数。