【问题标题】:Are these functions logically equivalent? [closed]这些功能在逻辑上是等价的吗? [关闭]
【发布时间】:2013-12-11 15:07:22
【问题描述】:

我认为答案是肯定的?最后的结果是一样的。

public bool CustomValidationDuplicateName(string sysPriority)
{
    var systemPriories = (this.gridView.Items.SourceCollection as IEnumerable<SystemPriority>).Where(item => item.ID > 0).ToList();
    var selectedItem = this.gridView.SelectedItem as SystemPriority;
    foreach (SystemPriority item in systemPriories)
    {
        if (item.Title == sysPriority && item != selectedItem) 
            return false;
    }           
    return true;
}

public bool CustomValidationDuplicateName2(string sysPriority)
{
    var systemPriories = (this.gridView.Items.SourceCollection as IEnumerable<SystemPriority>).Where(item => item.ID > 0).ToList();
    var selectedItem = this.gridView.SelectedItem as SystemPriority;
    return systemPriories.All(item => item.Title != sysPriority || item == selectedItem);
}


public bool CustomValidationDuplicateName(string sysPriority)
{
    var systemPriories = (this.gridView.Items.SourceCollection as IEnumerable<SystemPriority>).Where(item => item.ID > 0).ToList();
    var selectedItem = this.gridView.SelectedItem as SystemPriority;
    return systemPriories.All(item => item.Title == sysPriority && item != selectedItem);
}

我认为答案是肯定的?最后的结果是一样的。

【问题讨论】:

  • 你有什么问题?
  • 皮毛警告...请更正您的方法名称的拼写!它应该是复制而不是复制。
  • 您的意思是 !systemPriorities.All(...) 用于两个自定义验证功能之一吗?
  • 完成!!!我做到了。

标签: c# linq


【解决方案1】:

是的,这些功能是相同的。

查看De Morgan's Laws 了解为什么!(A &amp;&amp; B) == !A || !B。然后你会看到条件句做同样的事情。

!(item.Title == sysPriority && item != selectedItem)
    ==
(item.Title != sysPriority || item == selectedItem)

【讨论】:

    【解决方案2】:

    是的。

    但是,您应该去掉ToList(),并结合Where()All() 过滤器:

    public bool CustomValidationDublicateName2(string sysPriority)
    {
        return (this.gridView.Items.SourceCollection as IEnumerable<SystemPriority>)
             .All(item => item.ID < 0 
                       || item.Title != sysPriority 
                       || item == (SystemPriority)this.gridView.SelectedItem);
    }
    

    【讨论】:

    • @JoelCoehoorn:我不是这个意思。
    • 对不起...是的,这样更好。暂时忘记了 .All() 可以包含完整的谓词:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 2019-07-25
    • 2021-12-17
    相关资源
    最近更新 更多