我正在研究一些使用动态变量的代码。
dynamic variable;
在场景后面,此变量包含Shapes的集合,它再次是动态变量的集合。 所以这样的代码工作正常:
foreach(var shape in variable.Shapes) //Shapes is dynamic type too
{
double height = shape.Height;
}
我需要从这个系列中获得第一个项目高度。 这个黑客行得很好:
double height = 0;
foreach(var shape in variable.Shapes)
{
height = shape.Height; //shape is dynamic type too
break;
}
有没有更好的方法来实现这个目标?
答案 0 :(得分:7)
因为variable
是dynamic
,您将无法评估variable.Shapes.First()
,因为扩展方法的确定在编译时发生,并且动态调用在运行时发生。您必须显式调用静态方法
System.Linq.Enumerable.First<TType>(variable.Shapes).Height
。
其中TType
是可枚举项中预期的项目类型。
否则,请使用其他人建议的LINQ。
答案 1 :(得分:6)
您可以使用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;
}