2014-01-29 69 views
0

如何在C#中爲空集合使用默認值IEnumerable.Max?C#Max還是默認?

這是我想在Java中8做:

public static void doTest(List<String> l) { 
    System.out.println("max string is: " + l.stream().max((a, b) -> a.compareToIgnoreCase(b)).orElse("default")); 
    System.out.println("max length is: " + l.stream().mapToInt(s -> s.length()).max().orElse(-1)); 
} 

public static void main(String[] args) throws Exception { 
    System.out.println("Test with non-empty list"); 
    doTest(Arrays.asList("alpha", "beta", "charlie", "gamma")); 

    System.out.println(""); 

    System.out.println("Test with empty list"); 
    doTest(Arrays.asList()); 
} 

以下是我在C#至今:

static void DoTest(List<String> l) { 
    Console.WriteLine("max string is: " + l.Max()); 
    Console.WriteLine("max length is: " + l.Select(s => s.Length).Max()); 
} 

static void Main() { 
    Console.WriteLine("Test with non-empty list"); 
    DoTest(new List<String> { "alpha", "beta", "charlie", "gamma" }); 

    Console.WriteLine(""); 

    Console.WriteLine("Test with empty list"); 
    DoTest(new List<String> { }); 
}  
+2

不要編輯答案到你的問題,接受的答案... – Magus

+0

抱歉。一旦計時器允許我這樣做,我會接受。 – user2684301

+2

請恢復更改! – rae1

回答

6

我只是用DefaultIfEmpty

int maxLength = l.Select(s => s.Length).DefaultIfEmpty().Max(); 

或指定一個默認:

int maxLength = l.Select(s => s.Length).DefaultIfEmpty(-1).Max(); 

或者使用一個可爲空值,這樣你就可以告訴不同:

int? maxLength = l.Select(s => (int?) s.Length).Max(); 

然後maxLengthnull如果l是空的。

+0

哇,那很快!完美的作品。謝謝! – user2684301

+0

只要計時器允許我這樣做,我就會接受這個答案。 – user2684301

相關問題