Enumerable.Cast<TResult>(IEnumerable) 方法

定義

IEnumerable 的項目轉換成指定的型別。

C#
public static System.Collections.Generic.IEnumerable<TResult> Cast<TResult> (this System.Collections.IEnumerable source);

類型參數

TResult

要將 source 之項目轉換成的型別。

參數

source
IEnumerable

IEnumerable,其包含要轉換成型別 TResult 的項目。

傳回

IEnumerable<TResult>

IEnumerable<T>,其中包含已轉型成指定之型別的每個來源序列項目。

例外狀況

sourcenull

無法將序列中的項目轉換為型別 TResult

範例

下列程式代碼範例示範如何使用 Cast<TResult>(IEnumerable) ,在上使用 ArrayList標準查詢運算符。

C#
System.Collections.ArrayList fruits = new System.Collections.ArrayList();
fruits.Add("mango");
fruits.Add("apple");
fruits.Add("lemon");

IEnumerable<string> query =
    fruits.Cast<string>().OrderBy(fruit => fruit).Select(fruit => fruit);

// The following code, without the cast, doesn't compile.
//IEnumerable<string> query1 =
//    fruits.OrderBy(fruit => fruit).Select(fruit => fruit);

foreach (string fruit in query)
{
    Console.WriteLine(fruit);
}

// This code produces the following output:
//
// apple
// lemon
// mango

備註

此方法是使用延後執行來實作。 立即傳回值是物件,可儲存執行動作所需的所有資訊。 除非直接在 GetEnumerator C# 或 Visual Basic 中使用 foreach 來列舉對象,否則 For Each 不會執行這個方法所表示的查詢。

Cast<TResult>(IEnumerable)方法可藉由提供必要的類型資訊,在非泛型集合上叫用標準查詢運算符。 例如,ArrayList不會實IEnumerable<T>作 ,但藉由在 物件上ArrayList呼叫Cast<TResult>(IEnumerable),即可使用標準查詢運算符來查詢序列。

如果項目無法轉換成型 TResult別,這個方法會擲回 InvalidCastException

這個方法的來源序列為 IEnumerable,這表示專案具有的編譯時間靜態類型 object。 這個方法唯一執行的型別轉換是參考轉換和取消收件匣轉換。 集合中專案的運行時間類型必須符合目標類型,或者,如果是實值型別,元素的運行時間類型必須是目標型別的 Boxing 轉換結果。 不允許其他轉換類型,例如不同數值類型之間的轉換類型。

若要只取得可以轉換成 類型的 TResult專案,請使用 OfType 方法,而不是 Cast<TResult>(IEnumerable)

在查詢表達式中,明確類型的反覆專案變數會轉譯為的 Cast<TResult>(IEnumerable)調用。 此範例顯示明確具型別範圍變數的語法。

C#
from int i in objects

select使用查詢的 子句來執行其他轉換類型,例如隱含數值轉換。 下列範例會 Cast 使用 方法和 select 語句,將 Boxed 整數序列轉換成雙精度浮點數序列。

C#
IEnumerable sequence = Enumerable.Range(0, 10);
var doubles = from int item in sequence
                select (double)item;

適用於

產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

另請參閱