简化语法,将列表的最后一个元素与之前的元素进行比较
本文关键字:元素 比较 最后一个 语法 列表 | 更新日期: 2023-09-27 18:32:15
List<DateTime> list = new List<DateTime>();
目前我有以下语法:
if(list[list.Count - 1] != list.[list.Count - 2])
{
//do something
}
这是一个令人难以置信的长语法(在我的实际程序中,列表名称也长得多)。该列表也可以通过静态方法使用,该方法甚至将这种语法的宽度增加了很多。
我怎样才能写出更短、更易读的语法?
谢谢!
创建一个静态函数 在这种情况下,您将从任何地方使用它而无需创建对象
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
}
var count = list.Count;
if(list[count - 1] != list[count - 2])
{
//do something
}
将条件重构为函数:
static Boolean LastTwoElementsAreEqual<T>(IList<T> list) {
if (list.Count < 2)
return false;
return Equals(list[list.Count - 1], list[list.Count - 2]);
}
我强烈建议也将其放在一种方法中,但这可能是您可以在一行中完成的最短方法:
// Mine vs original.
if(list.Last() != list[list.Count - 2])
if(list[list.Count - 1] != list[list.Count - 2])
您可以使用包含函数来检查列表。
String toCheck = list [list.Count - 1]
if(!list.Contains())
{
// do the ...
}