7

我正在处理一些使用动态变量的代码。

dynamic variable;

在幕后,这个变量包含 Shapes 的集合,它又是动态变量的集合。所以像这样的代码工作正常:

foreach(var shape in variable.Shapes) //Shapes is dynamic type too
{
    double height = shape.Height; 
}

我需要从这个集合中获取第一个项目的高度。这个 hack 效果很好:

double height = 0;
foreach(var shape in variable.Shapes)
{
    height = shape.Height; //shape is dynamic type too
    break;
}

有没有更好的方法来做到这一点?

4

2 回答 2

8

因为variableis dynamic,您将无法评估variable.Shapes.First(),因为扩展方法的确定发生在编译时,而动态调用发生在运行时。您将不得不显式调用静态方法,

System.Linq.Enumerable.First<TType>(variable.Shapes).Height. TType可枚举项的预期类型在哪里。

否则,请按照其他人的建议使用 LINQ。

于 2012-09-19T21:57:49.730 回答
7

描述

您可以使用 LINQ方法First()FirstOrDefault()获取第一个项目。

First() - 返回序列的第一个元素。

FirstOrDefault() - 返回序列的第一个元素,如果序列不包含任何元素,则返回默认值。

样本

using System.Linq;

double height = 0;

// this will throw a exception if your list is empty
var item = System.Linq.Enumerable.First(variable.Shapes);
height = item.Height;

// in case your list is empty, the item is null and no exception will be thrown
var item = System.Linq.Enumerable.FirstOrDefault(variable.Shapes);
if (item != null)
{
     height = item.Height;
}

更多信息

于 2012-09-19T21:55:19.000 回答