2012-04-26 27 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]) 
相关问题