我正在研究一些使用动态变量的代码。

dynamic variable;

在后台,此变量包含Shapes的集合,而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;
}

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

最佳答案

因为variabledynamic,所以您将无法评估variable.Shapes.First(),因为扩展方法的确定在编译时发生,而动态调用在运行时发生。您将必须显式调用static方法,
System.Linq.Enumerable.First<TType>(variable.Shapes).Height
其中TType是可枚举项目的预期类型。

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

10-08 15:07