2012-04-26 32 views
1
List<DateTime> list = new List<DateTime>(); 

目前,我有以下語法:簡化語法來比較列表中的最後一個元素與之前的元素?

if(list[list.Count - 1] != list.[list.Count - 2]) 
{ 
    //do something 
} 

這是一個令人難以置信的長語法(在我的真正的程序列表中的名字是一個很長時間爲好)。該列表還可以通過靜態方法,甚至可以增加該語法的寬度。

我該如何寫這個語法更短,更具可讀性?

謝謝!

+0

沒關係。只需檢查Count是否至少有2 – 2012-04-26 09:41:43

+2

Thaknks的答覆,只是想知道是否有一個更直接的方式。在我的真實代碼中,if是4倍的長度。我仍然希望我的代碼可讀。 – PeterP 2012-04-26 09:45:55

回答

2
var count = list.Count; 

if(list[count - 1] != list[count - 2]) 
{ 
    //do something 
} 
3

請在這種情況下,靜態函數,你會用它在任何地方,而無需創建對象

if(myclass.PenultimateCondition(mylist)) 
{ 
    //do something 
} 

public class myclass 
{ 
    public static bool PenultimateCondition(List<Datetime> list) 
    { 
     return list[list.Count - 1] == list.[list.Count - 2]; 
    } 
} 

OR

化妝日期時間擴展方法。在這種情況下,你不必甚至可以編寫的類名

public class ExtensionMethod 
{ 
    public static bool PenultimateCondition(this IEnumerable<DateTime> value) 
    { 
     Datetime[] dt = value.ToArray(); 
     return dt[dt.Length-2] == dt[dt.Length-1]; 
    } 
} 

,並使用它像

if(myList.PenultimateCondition()) 
{ 
    //do something 
} 

OR

使通用的擴展方法。在這種情況下,你可以使用它的任何數據類型

public class ExtensionMethod 
{ 
    public static bool PenultimateCondition<T>(this IEnumerable<T> value) 
    { 
     T[] dt = value.ToArray(); 
     return Equals(dt[dt.Length-2], dt[dt.Length-1]); 
    } 
} 

,並使用它像

if(myList.PenultimateCondition()) 
{ 
    //do something 
} 
+1

甚至是靜態方法 – 2012-04-26 09:47:09

+0

@AdrianIftode謝謝。補充說,我的代碼 – 2012-04-26 09:49:50

+0

擴展方法我的意思,對不起 – 2012-04-26 09:49:55

-1

可以使用包含函數來檢查列表。

String toCheck = list [list.Count - 1] 
if(!list.Contains()) 
{ 
// do the ... 
} 
+0

這個答案如何回答這個問題? – 2012-04-26 09:49:08

+0

@AdrianIftode可能的意思是'if(list [list.Count - 2] .Contains(toCheck)'?' – lordcheeto 2012-04-26 10:18:09

1

重構你的病情到一個函數:

static Boolean LastTwoElementsAreEqual<T>(IList<T> list) { 
    if (list.Count < 2) 
    return false; 
    return Equals(list[list.Count - 1], list[list.Count - 2]); 
} 
+0

他想知道最後兩個是不是平等的,但基本思想成立可能想縮短這個函數名。 – lordcheeto 2012-04-26 10:12:45

0

我會強烈建議把它在一個方法爲好,但是這可能是你能做到這一點的一條線最短:

// Mine vs original. 
if(list.Last() != list[list.Count - 2]) 
if(list[list.Count - 1] != list[list.Count - 2]) 
相關問題