All()
使用All()
可以判斷序列中的所有元素(例如數組或列表)是否滿足指定條件。
MSDN
public static bool All<TSource>( this IEnumerable<TSource> source, Func<TSource, bool> predicate );
以下代碼使用一個lambda表達式來描述要檢查的條件。
代碼示例:
public static class Program
{
static void Main( string[] args )
{
int[] numbers = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
bool reaultA = numbers.All( value => value % 2 == 0 );
bool reaultB = numbers.All( value => value < 10 );
bool reaultC = numbers.All( value => value >= 5 );
System.Console.WriteLine( "輸出:{0}", numbers.Text() );
System.Console.WriteLine( "全是偶數 :{0}", reaultA );
System.Console.WriteLine( "小於10:{0}", reaultB );
System.Console.WriteLine( "大於等於5 :{0}", reaultC );
System.Console.ReadKey();
}
public static string Text<TSource>( this IEnumerable<TSource> i_source )
{
string text = string.Empty;
foreach( var value in i_source )
{
text += string.Format( "[{0}], ", value );
}
return text;
}
}
輸出:[0], [1], [2], [3], [4], [5], [6], [7], [8], [9],
全是偶數 :False
小於10:True
大於等於5 :False
那麼在空的數組中使用All()
會發生什麼呢?讓我們嘗試一下。
代碼示例:
public static class Program
{
static void Main( string[] args )
{
int[] numbers = new int[] {};
bool reaultA = numbers.All( value => value % 2 == 0 );
bool reaultB = numbers.All( value => value < 10 );
bool reaultC = numbers.All( value => value >= 5 );
System.Console.WriteLine( "輸出:{0}", numbers.Text() );
System.Console.WriteLine( "全是偶數 :{0}", reaultA );
System.Console.WriteLine( "小於等於10:{0}", reaultB );
System.Console.WriteLine( "大於等於5 :{0}", reaultC );
System.Console.ReadKey();
}
public static string Text<TSource>( this IEnumerable<TSource> i_source )
{
string text = string.Empty;
foreach( var value in i_source )
{
text += string.Format( "[{0}], ", value );
}
return text;
}
}
輸出:
全是偶數 :True
小於等於10:True
大於等於5 :True
由此可知,在序列爲空時所有條件都會返回true。
爲什麼爲空數組時返回True?讓我們做更多的研究。
在下面的類中,GetNumber()
函數會在調用時輸出日誌,讓我們進一步瞭解All()
。
代碼示例:
public static class Program
{
private class Parameter
{
public int ID { get; set; }
public string Name { get; set; }
public int GetNumber()
{
System.Console.WriteLine( "我{0} 數值爲{1} ", Name, ID );
return ID;
}
public override string ToString()
{
return string.Format( "ID:{0}, Name:{1}", ID, Name );
}
}
static void Main( string[] args )
{
Parameter[] parameters = new Parameter[]
{
new Parameter() { ID = 1, Name = "正一郎" },
new Parameter() { ID = 2, Name = "清次郎" },
new Parameter() { ID = 3, Name = "誠三郎" },
new Parameter() { ID = 4, Name = "徵史郎" },
};
// 全部小於10
bool reault = parameters.All( value => value.GetNumber() < 10 );
System.Console.WriteLine( "輸出:{0}", parameters.Text() );
System.Console.WriteLine( "全部小於10:{0}", reault );
System.Console.ReadKey();
}
public static string Text<TSource>( this IEnumerable<TSource> i_source )
{
string text = string.Empty;
foreach( var value in i_source )
{
text += string.Format( "[{0}], ", value );
}
return text;
}
}
我正一郎數值爲1
我清次郎數值爲2
我誠三郎數值爲3
我徵史郎數值爲4
輸出:[ID:1, Name:正一郎], [ID:2, Name:清次郎], [ID:3, Name:誠三郎], [ID:4, Nam
e:徵史郎],
全部小於10::True
如果所有元素都滿足條件,則可以看到每個元素都調用了GetNumber()
。
那麼,如果所有元素不符合條件的話將是什麼樣的結果呢?
代碼示例:
public static class Program
{
private class Parameter
{
public int ID { get; set; }
public string Name { get; set; }
public int GetNumber()
{
System.Console.WriteLine( "我{0}數值爲{1}", Name, ID );
return ID;
}
public override string ToString()
{
return string.Format( "ID:{0}, Name:{1}", ID, Name );
}
}
static void Main( string[] args )
{
Parameter[] parameters = new Parameter[]
{
new Parameter() { ID = 1, Name = "正一郎" },
new Parameter() { ID = 2, Name = "清次郎" },
new Parameter() { ID = 3, Name = "誠三郎" },
new Parameter() { ID = 4, Name = "徵史郎" },
};
bool reault = parameters.All( value => value.GetNumber() < 3 );
System.Console.WriteLine( "輸出:{0}", parameters.Text() );
System.Console.WriteLine( "全小於3:{0}", reault );
System.Console.ReadKey();
}
public static string Text<TSource>( this IEnumerable<TSource> i_source )
{
string text = string.Empty;
foreach( var value in i_source )
{
text += string.Format( "[{0}], ", value );
}
return text;
}
}
我正一郎數值爲1
我清次郎數值爲2
我誠三郎數值爲3
輸出:[ID:1, Name:正一郎], [ID:2, Name:清次郎], [ID:3, Name:誠三郎], [ID:4, Nam
e:徵史郎],
全小於3:False
可以發現徵史郎的元素沒有被調用。
如果存在不符合條件的要素,則執行將會被終止。
但是,這似乎跟空數組返回true並沒有直接關係。
那麼,true是否以空數組形式返回?經過搜索並沒有找到相關的的官方資料。