Enumerable.Cast<TResult>(IEnumerable) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
將 IEnumerable 的項目轉換成指定的型別。
public:
generic <typename TResult>
[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<TResult> ^ Cast(System::Collections::IEnumerable ^ source);
public static System.Collections.Generic.IEnumerable<TResult> Cast<TResult> (this System.Collections.IEnumerable source);
static member Cast : System.Collections.IEnumerable -> seq<'Result>
<Extension()>
Public Function Cast(Of TResult) (source As IEnumerable) As IEnumerable(Of TResult)
類型參數
- TResult
要將 source
之項目轉換成的型別。
參數
- source
- IEnumerable
IEnumerable,其包含要轉換成型別 TResult
的項目。
傳回
IEnumerable<T>,其中包含已轉型成指定之型別的每個來源序列項目。
例外狀況
source
為 null
。
無法將序列中的項目轉換為型別 TResult
。
範例
下列程式碼範例示範如何使用 Cast<TResult>(IEnumerable) ,在 上使用 ArrayList 標準查詢運算子。
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
' Create an ArrayList and add items to it.
Dim fruits As New System.Collections.ArrayList()
fruits.Add("mango")
fruits.Add("apple")
fruits.Add("lemon")
' Call Cast(Of String) to cast the ArrayList elements to strings.
Dim query As IEnumerable(Of String) =
fruits.Cast(Of String)().OrderBy(Function(fruit) fruit).Select(Function(fruit) fruit)
'' The following code, without the cast, doesn't compile.
'Dim query As IEnumerable(Of String) = _
' fruits.OrderBy(Function(fruit) fruit).Select(Function(fruit) fruit)
Dim output As New System.Text.StringBuilder
For Each fruit As String In query
output.AppendLine(fruit)
Next
' Display the output.
Console.WriteLine(output.ToString())
' This code produces the following output:
'
' apple
' lemon
' mango
備註
這個方法是使用延後執行來實作。 立即傳回值是一個物件,會儲存執行動作所需的所有資訊。 除非直接呼叫其 GetEnumerator
方法或在 C# 或 foreach
For Each
Visual Basic 中使用 來列舉物件,否則不會執行這個方法所代表的查詢。
方法 Cast<TResult>(IEnumerable) 可藉由提供必要的型別資訊,在非泛型集合上叫用標準查詢運算子。 例如, ArrayList 不會實 IEnumerable<T> 作 ,但藉由在 物件上 ArrayList 呼叫 Cast<TResult>(IEnumerable) ,即可使用標準查詢運算子來查詢序列。
如果專案無法轉換成類型 TResult
,這個方法會 InvalidCastException 擲回 。
這個方法的來源序列是 IEnumerable ,這表示專案具有 的編譯時間靜態類型 object
。 這個方法唯一執行的型別轉換是參考轉換和 Unboxing 轉換。 集合中專案的執行時間類型必須符合目標型別,或者,如果實值型別,元素的執行時間類型必須是目標型別的 Boxing 轉換結果。 不允許其他轉換類型,例如不同數數值型別之間的轉換類型。
若要只取得可以轉換成 類型的 TResult
專案,請使用 OfType 方法,而不是 Cast<TResult>(IEnumerable) 。
在查詢運算式中,明確具類型的反復專案變數會轉譯為 的 Cast<TResult>(IEnumerable) 調用。 此範例顯示明確型別範圍變數的語法。
from int i in objects
From i As Integer In objects
select
使用查詢的 子句來執行其他轉換類型,例如隱含數值轉換。 下列範例會 Cast
使用 方法和 select
語句,將 Boxed 整數序列轉換成雙精度浮點數序列。
IEnumerable sequence = Enumerable.Range(0, 10);
var doubles = from int item in sequence
select (double)item;
Dim sequence As IEnumerable = Enumerable.Range(0, 10)
Dim doubles = From item As Integer In sequence
Select CType(item, Double)
適用於
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將推出:在 2024 年,我們將隨著內容的意見反應機制逐步淘汰 GitHub 問題,並以新的意見反應系統來取代。 如需詳細資訊,請參閱提交並檢視相關的意見反應