Dapper を使用して動的オブジェクトを返し、手動でマッピングすることもあります。すべてが正常に機能していますが、キャストの法則とは何か、次の例が当てはまる理由は何かと考えていました。
(これらの例では、既知の型として「StringBuilder」を使用しましたが、通常は「Product」のようなものです)
IEnumerable<dynamic>
例 1: 'makeStringBuilder' は明らかにStringBuilder
オブジェクトを返すのに、なぜこれはを返すのですか?
例 2: なぜこれはビルドされるのに、'Example1' はビルドされないのIEnumerable<StringBuilder>
ですか?
例 3: 例 2 と同じ質問ですか?
private void test()
{
List<dynamic> dynamicObjects = {Some list of dynamic objects};
IEnumerable<dynamic> example1 = dynamicObjects.Select(s => makeStringBuilder(s));
IEnumerable<StringBuilder> example2 = dynamicObjects.Select(s => (StringBuilder)makeStringBuilder(s));
IEnumerable<StringBuilder> example3 = dynamicObjects.Select(s => makeStringBuilder(s)).Cast<StringBuilder>();
}
private StringBuilder makeStringBuilder(dynamic s)
{
return new StringBuilder(s);
}
上記の例では、これを処理するための推奨される方法はありますか? このようにキャストするとパフォーマンスが低下しますか? ありがとう!