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

メソッドに入れることも強くお勧めしますが、これはおそらく1行で実行できる最短のものです。

// 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

contains 関数を使用してリストを確認できます。

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