-2

我需要暂时将多个值存储在列表或数组中。这些值是多种类型,如字符串、整数、日期时间等。

我有两个选择:

选项 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!
}

问题:

每个实施选项的性能优势和/或影响是什么?据我所知(或 quessing),boxinq 在使用object[].

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

使用对性能有这么大的影响object[]吗,我真的应该考虑一下选项 2 之类的东西吗?

4

2 回答 2

1

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

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

我确实遇到了一个场景(使用许多可能是 int、float 或 double 的数字),其中装箱对用户体验很重要。我使用表达式树解决了这个问题。

于 2012-05-12T17:41:14.890 回答
0

我认为不会对性能产生太大影响。如果您使用 object[] _objects,则用于查找对象类型的反射可能会减慢它的速度。.GetType() 函数。

于 2012-05-12T17:42:06.753 回答