Преобразование типов данных
Обновлен: Ноябрь 2007
Методы преобразования изменяют тип входных объектов.
Операции преобразования в запросах LINQ полезны для различных приложений. Ниже приведены некоторые примеры.
Метод Enumerable.AsEnumerable<TSource> может использоваться для скрытия пользовательскую реализацию стандартного оператора запроса типа.
Метод Enumerable.OfType<TResult> может использоваться для поддержки запросов LINQ к непараметризованным коллекциям.
Методы Enumerable.ToArray<TSource>, Enumerable.ToDictionary, Enumerable.ToList<TSource> и Enumerable.ToLookup можно использовать для принудительного немедленного выполнения запроса вместо откладывания выполнения до перечисления запроса.
Методы
В следующей таблице перечислены методы стандартных операторов запросов, которые выполняют преобразование типов данных.
Методы преобразования, имена которых начинаются с "As", изменяют статический тип исходной коллекции но не перечисляют его. Методы, имена которых начинаются с "To", перечисляют исходную коллекцию и помещают элементы в соответствующий тип коллекции.
Имя метода |
Описание |
Синтаксис выражения запроса C# |
Синтаксис выражения запроса Visual Basic |
Дополнительные сведения |
---|---|---|---|---|
AsEnumerable |
Возвращает входные данные, приведенные к типу IEnumerable<T>. |
Неприменимо. |
Неприменимо. |
|
AsQueryable |
Преобразует универсальный объект IEnumerable в универсальный объект IQueryable. |
Неприменимо. |
Неприменимо. |
|
Cast |
Приводит элементы коллекции к указанному типу. |
Используйте явным образом типизированную переменную диапазона. Пример. from string str in words |
From … As … |
|
OfType |
Фильтрует значения в зависимости от возможности приведения их к указанному типу. |
Неприменимо. |
Неприменимо. |
|
ToArray |
Преобразует коллекцию в массив. Этот метод вызывает выполнение запроса. |
Неприменимо. |
Неприменимо. |
|
ToDictionary |
Помещает элементы в Dictionary<TKey, TValue> на основании функции выбора ключа. Этот метод вызывает выполнение запроса. |
Неприменимо. |
Неприменимо. |
|
ToList |
Преобразует коллекцию в List<T>. Этот метод вызывает выполнение запроса. |
Неприменимо. |
Неприменимо. |
|
ToLookup |
Помещает элементы в Lookup<TKey, TElement> (словарь "один ко многим") на основании функции выбора ключа. Этот метод вызывает выполнение запроса. |
Неприменимо. |
Неприменимо. |
Пример синтаксиса выражения запроса
В следующем примере для приведения типа к подтипу перед доступом к члену, доступному только для подтипа, используется явным образом типизированная переменная диапазона в C# или предложение From As в Visual Basic.
Class Plant
Public Name As String
End Class
Class CarnivorousPlant
Inherits Plant
Public TrapType As String
End Class
Sub Cast()
Dim plants() As Plant = { _
New CarnivorousPlant With {.Name = "Venus Fly Trap", .TrapType = "Snap Trap"}, _
New CarnivorousPlant With {.Name = "Pitcher Plant", .TrapType = "Pitfall Trap"}, _
New CarnivorousPlant With {.Name = "Sundew", .TrapType = "Flypaper Trap"}, _
New CarnivorousPlant With {.Name = "Waterwheel Plant", .TrapType = "Snap Trap"}}
Dim query = From plant As CarnivorousPlant In plants _
Where plant.TrapType = "Snap Trap" _
Select plant
Dim sb As New System.Text.StringBuilder()
For Each plant In query
sb.AppendLine(plant.Name)
Next
' Display the results.
MsgBox(sb.ToString())
' This code produces the following output:
' Venus Fly Trap
' Waterwheel Plant
End Sub
class Plant
{
public string Name { get; set; }
}
class CarnivorousPlant : Plant
{
public string TrapType { get; set; }
}
static void Cast()
{
Plant[] plants = new Plant[] {
new CarnivorousPlant { Name = "Venus Fly Trap", TrapType = "Snap Trap" },
new CarnivorousPlant { Name = "Pitcher Plant", TrapType = "Pitfall Trap" },
new CarnivorousPlant { Name = "Sundew", TrapType = "Flypaper Trap" },
new CarnivorousPlant { Name = "Waterwheel Plant", TrapType = "Snap Trap" }
};
var query = from CarnivorousPlant cPlant in plants
where cPlant.TrapType == "Snap Trap"
select cPlant;
foreach (Plant plant in query)
Console.WriteLine(plant.Name);
/* This code produces the following output:
Venus Fly Trap
Waterwheel Plant
*/
}
Дополнительные сведения о преобразовании типов данных
Topic | Location |
---|---|
Практическое руководство. Выполнение запроса к ArrayList с помощью LINQ | LINQ (Language-Integrated Query) |
Практическое руководство. Выполнение запроса к ArrayList с помощью LINQ | dv_Linq |
Практическое руководство. Выполнение запроса к ArrayList с помощью LINQ | dv_Linq |
См. также
Основные понятия
Общие сведения о стандартных операторах запроса
Выражения запросов LINQ (Руководство по программированию в C#)