2013-12-11 33 views
-6

我的答案是YES?那麼結果將是相同的。這些功能在邏輯上是否相同?

public bool CustomValidationDublicateName(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 CustomValidationDublicateName2(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 CustomValidationDublicateName(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); 
} 

我的答案是YES?那麼結果將是相同的。

+4

你的問題是什麼? – doerig

+0

Pet-Peeve警告......請更正您方法名稱的拼寫!它應該是**重複**不是Dublicate。 – Kevin

+0

您是否意指'!systemPriorities.All(...)'這兩個自定義驗證函數之一? –

回答

4

是的。

然而,你應該擺脫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); 
} 
+0

@JoelCoehoorn:這不是我的意思。 – SLaks

+0

對不起...是的,那更好。忘記了那一刻.All()可能包括完整謂詞:( –

3

是,這些功能都是平等的。

查找De Morgan's Laws,看看爲什麼!(A && B) == !A || !B。然後你會看到條件是做同樣的事情。

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