7

動的変数を使用するコードに取り組んでいます。

dynamic variable;

舞台裏では、この変数には、動的変数のコレクションである形状のコレクションが含まれています。したがって、次のようなコードは正常に機能します。

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;
}

これを達成するためのより良い方法はありますか?

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 に答える