質問: await dataSource.ReleaseLock(userId, unlockingUserId, itemId, sessionId); ``` 今度は、次のコード: ``` ... if (unlocked.First().success != true) ``` 正常に動作します。 編集:それは私の側で間違いだった。 GetUserInfosはIEnumerableの代わりに動的に戻っていました。
回答: `Enumerable.First()`は、Enumerableで定義された拡張メソッドであり、 `List`メソッドではありません。実際には、静的メソッドであり、コンパイラの魔法によってインスタンスメソッドのように*見える*ようになっています。コンパイラは、拡張メソッド呼び出しを静的な同等のものに変換することを知って`Enumerable.First()` 。つまり、 `Enumerable.First()`は`Enumerable.First(someEnumerable,...)`なり`Enumerable.First(someEnumerable,...)` 。 しかし、 `First()`動的に呼び出すと、動的オブジェクトのメソッドとして呼び出されます。ランタイムはオブジェクトの動的メソッドを検索し、代わりに静的メソッドを呼び出すことを知りません。 静的なフォームで直接呼び出すと、拡張メソッドを使用することができ`if (!Enumerable.First(unlocked)) ...`