在foreach中使用.Get()与事先生成列表C#

时间:2017-03-29 19:04:43

标签: c# performance list

我有一个关于表现的问题,我很好奇。如果做得更好(表现,而不是意见明智):

    foreach (var Obj in SomeData.GetType().GetProperties())
    {
      // Do work
    }

或者应该做一些类似下面的事情?

List<object> DataProperties = SomeData.GetType().GetProperties();
foreach (var Obj in DataProperties)
{
// Do work
}

(也可以是(int i = 0; i&lt; [Object] .Count; i ++),我不确定这是否会影响性能,只要使用索引与对象本身相比)< / p>

我会假设.GetType()。GetProperties()枚举器每次调用它会花费一些开销,但是它会创建比创建列表和枚举对象属性一次更多的开销吗?或者最后(大规模)可变性能差异是否小到任何一种方式都可以?

我很感激反馈!

1 个答案:

答案 0 :(得分:1)

这些是相同的。表现没有差别。 System.Type.GetProperties()返回PropertyInfo[],而不是List<object>。从List<object>构建PropertyInfo[]比较昂贵,例如DataProperties = new List<object>(SomeData.GetType().GetProperties());会有额外的开销。