2017-09-21 11 views
-2

私は、オープンソースプロジェクトのソースコードをコンパイルしようとしていると私は、次のコードを理解しようとしています: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); 

が...このためだけの短いバリアントである

+1

正確には 'ExistingHeaders'が宣言されていますか?これはラムダではなく、エクスプレッションボディメソッドです。それは何も生成しません。これはパラメータとして 'INameValue'を取り、この値の' Name'が 'jsonHeader.Name'に等しく、' Value'が 'hsonHeader.Value'に等しいかどうかをチェックするメソッドです。 –

+2

あなたが共有したコードに 'value'が作成されていません。彼らは、 'INameValue'を実装するクラスのインスタンスをパラメータとして取るメソッドを宣言しました。インタフェースのインスタンスをインスタンス化することはできません。インタフェースのインスタンスなどはありません。 *インターフェースを実装するクラスのインスタンスを作成することができます。 –

+0

おそらく質問は=についてですか?これは、C#6で導入された表現式のメソッドです。 – JnJnBoo

答えて

3

この... ...

bool ExistingHeaders(INameValue value) 
{ 
    return value.Name.Equals(jsonHeader.Name, StringComparison.InvariantCultureIgnoreCase) 
     && value.Value.Equals(jsonHeader.Value, StringComparison.InvariantCultureIgnoreCase); 
} 
+0

ありがとうございます。それは私のためにそれを明確にします。私は "宣言でコンストラクタの引数を指定することはできません"というエラーが発生しています。これがどのように解決されるのかを提案できますか? – Blazanor

+0

@Blazanorエラーと解決方法については、こちらを参照してください。https://docs.microsoft.com/en-us/dotnet/csharp/misc/cs1528 – Michael

1

INameValue値はExistingHeadersという名前のメソッドのパラメータです。インターフェイスをパラメータ型として使用することにより、INameValueを実装したオブジェクトをすべてパラメータとして渡すことができます。

パラメータは、メソッドに渡される前に初期化されています。このメソッドは何もインスタンス化していません。パラメータとして渡されたオブジェクトの名前と値のプロパティで文字列の比較を行うだけです。

関連する問題