スタックオーバーフローまたは MSDN でこの質問に対する答えが見つからなかったことに驚いています。私の検索スキルがここでのギャップだと強く疑っていますが、とにかく質問するつもりです。私はこれらの 3 つの 投稿をここstackoverflowで見ました。それらのどれも私が尋ねていることに対する直接的な質問や回答ではありませんが、それらはいずれにせよ、それらから回答を収集したいと思っていたほど接線的に関連しています。しかし、運がない! とにかく、ここで質問です!
Action<int, int>
プロパティを宣言するインターフェースを定義するとき
public interface ICoordinateProcessor {
System.Action<int, int> onTwoIntegers { get; }
}
2 つの整数をパラメータとして取る null を返すラムダで簡単に実装できます。
public class RealCoordinateProcessor : ICoordinateProcessor {
public override Action<int, int> onTwoIntegers {
get {
return (x, y) => this.someInternalState = x + y;
}
}
}
お手軽ピージー!しかし、roslyn を使用してインターフェイスをオートコンプリートすると、次のように入力されます。
public class RealCoordinateProcessor : ICoordinateProcessor {
public override Action<int, int> onTwoIntegers => throw new NotImplementedException();
}
これはエラーや警告なしでコンパイルされ、また非常に簡潔な構文であり、これまでに見たことがないため、使用したいと考えています。上記の 2 番目のスニペットと同じ効果を得るには、より厳密な構文を使用するにはどうすればよいでしょうか。
または、3 番目のスニペットでラムダのパラメーターにアクセスするにはどうすればよいでしょうか。これを試すとき:
public override Action<int, int> onTwoIntegers (x, y) => throw new NotImplementedException();
私は明らかに何をやっているのかわからないので、コンパイラは異常に動きます。しかし、他に何を試すべきかわかりませんし、例を検索する方法もわかりません。
これで、Roslyn を使用した C#6 では、式の本体関数メンバーを使用できます。
public override Action<int,int> onTwoIntegers => (x,y) => { };
一般に、デリゲートラムダ構文とそれほど違いはありません。
var onTwoIntegersClass = new RealCoordinateProcessor().onTwoIntegers;
Action<int,int> onTwoIntegersVar = (x,y)=>{};
Delegate.Combine(onTwoIntegersVar, onTwoIntegersClass);
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加