同じシグニチャを持つ2つのyield return
メソッドがある場合、コンパイラはそれらが類似していると認識していないようです。
私はyield return
このような2つの方法があります:
public static IEnumerable<int> OddNumbers(int N)
{
for (int i = 0; i < N; i++)
if (i % 2 == 1) yield return i;
}
public static IEnumerable<int> EvenNumbers(int N)
{
for (int i = 0; i < N; i++)
if (i % 2 == 0) yield return i;
}
これにより、次のステートメントが正常にコンパイルされることを期待します。
Func<int, IEnumerable<int>> generator = 1 == 0 ? EvenNumbers : OddNumbers; // Does not compile
エラーメッセージが表示されます
'メソッドグループ'と'メソッドグループ'の間に暗黙の変換がないため、条件式のタイプを判別できません
ただし、明示的なキャストは機能します。
Func<int, IEnumerable<int>> newGen = 1 == 0 ? (Func<int, IEnumerable<int>>)EvenNumbers : (Func<int, IEnumerable<int>>)OddNumbers; // Works fine
私は何かが足りないのですか、それともこれはC#コンパイラのバグですか(VS2010SP1を使用しています)?
注:私はこれを読みましたが、最初のものはうまくコンパイルされるべきだったと今でも信じています。
編集:var
コードスニペットでの使用法を削除しました。これは私が意図したものではなかったためです。