私は、オープンソースプロジェクトのソースコードをコンパイルしようとしていると私は、次のコードを理解しようとしています:jsonHeaderもINameValueC#のラムダ・インタフェースの割り当て
を実装
public interface INotifyPropertyChanged
{
event PropertyChangedEventHandler PropertyChanged;
}
public interface INameValue: INotifyPropertyChanged
{
string Name { get; set; }
string Value { get; set; }
}
bool ExistingHeaders(INameValue value) =>
value.Name.Equals(jsonHeader.Name, StringComparison.InvariantCultureIgnoreCase)
&& value.Value.Equals(jsonHeader.Value, StringComparison.InvariantCultureIgnoreCase);
私の理解から、これでしょうINameValueインタフェースを実装するオブジェクトとして「value」を作成し、その「Name」プロパティと「Value」プロパティをjsonHeaderの対応する値と比較します。
このようにインターフェイスのインスタンスをインスタンス化すると、NameプロパティとValueプロパティはnullになりますか?
これについて私の理解は正しいですか?
bool ExistingHeaders(INameValue value) =>
value.Name.Equals(jsonHeader.Name, StringComparison.InvariantCultureIgnoreCase)
&& value.Value.Equals(jsonHeader.Value, StringComparison.InvariantCultureIgnoreCase);
が...このためだけの短いバリアントである
正確には 'ExistingHeaders'が宣言されていますか?これはラムダではなく、エクスプレッションボディメソッドです。それは何も生成しません。これはパラメータとして 'INameValue'を取り、この値の' Name'が 'jsonHeader.Name'に等しく、' Value'が 'hsonHeader.Value'に等しいかどうかをチェックするメソッドです。 –
あなたが共有したコードに 'value'が作成されていません。彼らは、 'INameValue'を実装するクラスのインスタンスをパラメータとして取るメソッドを宣言しました。インタフェースのインスタンスをインスタンス化することはできません。インタフェースのインスタンスなどはありません。 *インターフェースを実装するクラスのインスタンスを作成することができます。 –
おそらく質問は=についてですか?これは、C#6で導入された表現式のメソッドです。 – JnJnBoo