C#lambda接口赋值

时间:2017-09-21 16:01:07

标签: c# lambda

我正在尝试编译开源项目的源代码,我正在尝试理解以下代码:

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);

jsonHeader还实现了INameValue

根据我的理解,这将尝试创建“value”作为实现INameValue接口的对象,然后将其“Name”和“Value”属性与jsonHeader中的相应值进行比较。

当然以这种方式实例化接口实例会导致Name和Value属性为空吗?

我对此的理解是否正确?

2 个答案:

答案 0 :(得分:3)

此...

bool ExistingHeaders(INameValue value) => 
       value.Name.Equals(jsonHeader.Name, StringComparison.InvariantCultureIgnoreCase) 
    && value.Value.Equals(jsonHeader.Value, StringComparison.InvariantCultureIgnoreCase);

...只是一个较短的变种......

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

答案 1 :(得分:1)

INameValue值是名为ExistingHeaders的方法的参数。通过使用接口作为参数类型,它允许任何已实现INameValue的对象作为参数传入。

参数在传递给方法之前已初始化。该方法不是实例化任何东西。它只是对作为参数传入的对象中的属性Name和Value进行字符串比较。