8
背景:+=
オペレーターがイベントのaddメソッドを呼び出すためだけの構文糖ですのでC# : The New and Improved C# 6.0null伝播がイベントに対して機能しないのはなぜですか?
using System;
internal sealed class Program
{
private sealed class Inner
{
internal int Value { get; } = 42;
internal void DoSomething(int value) { }
internal event EventHandler Event;
}
private sealed class Outer
{
internal Inner Inner { get; } = new Inner();
}
private static void Main(string[] args)
{
Outer outer = null;
// Works as expected (does not call Inner and Value, val is null)
int? val = outer?.Inner.Value;
// Works as expected (does not call Inner and DoSomething)
outer?.Inner.DoSomething(42);
// CS0070: The event 'Program.Inner.Event' can only appear on the left hand
// side of += or -= (except when used from within the type 'Program.Inner')
outer?.Inner.Event += (s, e) => { };
}
}
、私は最後の行はDoSomething()
にだけ呼び出しのようにコンパイルされることを期待しているだろう(そしてそれはdoesnのこと実行時には何もしません)。
これが許可され、 'outer'がnullの場合、どうなると思いますか? – DavidG
@DavidG DoSomething()の呼び出しのように、かっこ内の注釈を参照してください。何もしないでください。 –
しかし、あなたは 'outer?.Inner.Value = 42;'を実行できないことに気づくでしょう。 – DavidG