は、次の例を考えてみましょう:タイプ推論は右から左に行われますか?
この2行は、仕事とうまく実行public class Person
{
public int Age { get; set; }
}
public class Builder<TSource>
{
public Builder<TSource> WithValue<TValue>(Func<TSource, TValue>, TValue value)
{
// ...
}
}
:
Builder<Person> builder = new Builder<Person>();
builder.WithValue(p => p.Age, 20);
をしかしので、これらの操作を行います。
Builder<Person> builder = new Builder<Person>();
object age = "20"; // <-- string value
builder.WithValue(p => p.Age, age);
型推論が道Iが動作しません後者の例で動作することを期待してください。
式(Func<Person, int>
)を指定すると、2番目の引数がint
タイプに制限されていると考えられます。しかし、私はobject
をうまく通すことができます。
これは、タイプ推論が右から左に行われているためです。つまり、TValue
引数がobject
と推測されていて、次にFunc<TSource, TValue>
式がFunc<Person, object>
に制約されています。p => p.Age
はそれほど問題ありません。
私の前提は正しいですか?
もしそうなら、なぜこのように型推論が行われますか?私はそれが左から右へもっと自然であると感じます。
最も派生型がint型ではありませんか? –
@MatiasCicero 'int'型は両方の制約を満たすわけではありません。 'int'型の変数に' object'を格納することはできないので、2つの制約のうちの1つを満たしています。 – Servy
私は今それを得ると思います。迅速な答えをありがとう! –