1
List<DateTime> list = new List<DateTime>();

目前我有以下语法:

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

这是一个令人难以置信的长语法(在我的实际程序中,列表名称也长得多)。该列表也可通过静态方法获得,该方法甚至会大大增加此语法的宽度。

我怎样才能把这个语法写得更短、更易读?

谢谢!

4

5 回答 5

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];
    }
}

或者

制作日期时间扩展方法。在这种情况下,您甚至不必写类名

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
}

或者

制作通用扩展方法。在这种情况下,您可以将其用于任何数据类型

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
}
于 2012-04-26T09:46:16.430 回答
2
var count = list.Count; 

if(list[count - 1] != list[count - 2])
{
    //do something
} 
于 2012-04-26T09:42:25.167 回答
1

将您的条件重构为一个函数:

static Boolean LastTwoElementsAreEqual<T>(IList<T> list) {
  if (list.Count < 2)
    return false;
  return Equals(list[list.Count - 1], list[list.Count - 2]);
}
于 2012-04-26T09:48:01.517 回答
0

我强烈建议也将其放入一种方法中,但这可能是您可以在一行中完成的最短的方法:

// Mine vs original.
if(list.Last() != list[list.Count - 2])
if(list[list.Count - 1] != list[list.Count - 2])
于 2012-04-26T10:31:03.543 回答
-1

您可以使用包含功能来检查列表。

String toCheck = list [list.Count - 1]
if(!list.Contains())
{
 // do the ...
}
于 2012-04-26T09:47:40.687 回答