あまり難解なことをしているとは思いませんが、これについて他に質問はありません。
次のコード(私はそれを本質に還元しました)はC#4でコンパイラエラーを生成します。ただし、type引数が何であるかは明らかです-最大公約数(「クラスA」)も明示的に定義されていますメソッド「Frob」の戻り型。コンパイラーはラムダ式のすべての戻り型のリストを作成し、それらの共通の祖先を見つけるために祖先ツリーを作成し、それを含むメソッドの期待される戻り型と調整するべきではありませんか?
メソッド'System.Linq.Enumerable.Select(System.Collections.Generic.IEnumerable、System.Func)'の型引数は、使用法から推測できません。タイプ引数を明示的に指定してみてください。
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
namespace Sample
{
public abstract class A
{
private A(int index) { /* ... */ }
public sealed class A1 : A
{
public A1(string text, int index)
: base(index)
{ /* ... */ }
}
public sealed class A2 : A
{
public A2(int index)
: base(index)
{ /* ... */ }
}
private static Regex _regex = new Regex(@"(to be)|(not to be)");
public static IEnumerable<A> Frob(string frobbable)
{
return _regex.Matches(frobbable)
.Cast<Match>()
.Select((match, i) =>
{
if (match.Groups[1].Success)
{
return new A1(match.Groups[1].Value, i);
}
else
{
return new A2(i);
}
});
}
}
}