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

时间:2012-05-12 17:21:12

标签: c# types casting

我需要暂时在列表或数组中存储多个值。这些值是多种类型,如string,int,datetime等。

我有两个选择:

选项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的内容吗?

2 个答案:

答案 0 :(得分:1)

你建议的类IntValue基本上是一个整数...它将它封装在一个对象中,它可以参与一个对象[]。我希望在这种情况下没有性能改进,并且根据你的实现,它可能比编译器实现的装箱更糟糕。

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

我确实遇到了一个场景(使用许多可能是int,float或double的数字),其中拳击对用户体验很重要。我解决了using expression trees

答案 1 :(得分:0)

我认为没有太多的性能影响。如果使用object [] _objects,用于查找对象类型的反射可能会使其慢一点。 .GetType()函数。