猿教程 Logo

Linq类型转换操作符

阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效:去购买

LINQ中的转换运算符在转换序列(集合)中的元素的类型时很有用。 有三种类型的转换运算符:As运算符(AsEnumerable和AsQueryable),To运算符(ToArray,ToDictionary,ToList和ToLookup)和Casting运算符(Cast和OfType)。

下表列出了所有转换运算符。

方法描述
AsEnumerable返回输入序列为IEnumerable <t>
AsQueryable将IEnumerable转换为IQueryable,以模拟远程查询提供程序
Cast将非通用集合覆盖到通用集合(IEnumerable to IEnumerable <T>)
OfType基于指定的类型过滤集合
ToArray将集合转换为数组
ToDictionary基于键选择器功能将元素放入词典
ToList将集合转换为List
ToLookup将元素组合成Lookup <TKey,TElement>

AsEnumerable&AsQueryable:

AsEnumerable和AsQueryable方法分别将源对象转换为IEnumerable <T>或IQueryable <T>。

参考下面的例子:

相关实例:

class Program
{

    static void ReportTypeProperties<T>(T obj)
    {
        Console.WriteLine("Compile-time type: {0}", typeof(T).Name);
        Console.WriteLine("Actual type: {0}", obj.GetType().Name);
    }

    static void Main(string[] args)
    {
        Student[] studentArray = { 
                new Student() { StudentID = 1, StudentName = "John", Age = 18 } ,
                new Student() { StudentID = 2, StudentName = "Steve",  Age = 21 } ,
                new Student() { StudentID = 3, StudentName = "Bill",  Age = 25 } ,
                new Student() { StudentID = 4, StudentName = "Ram" , Age = 20 } ,
                new Student() { StudentID = 5, StudentName = "Ron" , Age = 31 } ,
            };   
            
        ReportTypeProperties( studentArray);
        ReportTypeProperties(studentArray.AsEnumerable());
        ReportTypeProperties(studentArray.AsQueryable());   
    }
}

运行结果:

Compile-time type: Student[] 
Actual type: Student[]
Compile-time type: IEnumerable`1
Actual type: Student[]
Compile-time type: IQueryable`1
Actual type: EnumerableQuery`1

正如你可以看到,在上面的例子中AsEnumerable和AsQueryable方法分别将编译时类型转换为IEnumerable和IQueryable

有关AsEnumerable和AsQueryable方法的详细信息,请访问stackoverflow


Cast:

Cast与AsEnumerable <T>相同。 它将源对象转换为IEnumerable <T>。

相关实例:

class Program
{

    static void ReportTypeProperties<T>(T obj)
    {
        Console.WriteLine("Compile-time type: {0}", typeof(T).Name);
        Console.WriteLine("Actual type: {0}", obj.GetType().Name);
    }

    static void Main(string[] args)
    {
        Student[] studentArray = { 
                new Student() { StudentID = 1, StudentName = "John", Age = 18 } ,
                new Student() { StudentID = 2, StudentName = "Steve",  Age = 21 } ,
                new Student() { StudentID = 3, StudentName = "Bill",  Age = 25 } ,
                new Student() { StudentID = 4, StudentName = "Ram" , Age = 20 } ,
                new Student() { StudentID = 5, StudentName = "Ron" , Age = 31 } ,
            };   
         
        ReportTypeProperties( studentArray);
        ReportTypeProperties(studentArray.Cast<Student>());
    }
}

运行结果:

Compile-time type: Student[] 
Actual type: Student[]
Compile-time type: IEnumerable`1
Actual type: Student[]
Compile-time type: IEnumerable`1
Actual type: Student[]
Compile-time type: IEnumerable`1
Actual type: Student[]

studentArray.Cast <Student>()与(IEnumerable <Student>)studentArray相同,但是Cast <Student>()更易读。


To运算符:ToArray(),ToList(),ToDictionary():

顾名思义,ToArray(),ToList(),ToDictionary()方法将源对象分别转换为数组,List或Dictionary。

To操作符强制执行查询。 它强制远程查询提供程序执行查询并从底层数据源获取结果,例如 SQL Server数据库。

相关实例:

IList<string> strList = new List<string>() { 
                                            "One", 
                                            "Two", 
                                            "Three", 
                                            "Four", 
                                            "Three" 
                                            };

string[] strArray = strList.ToArray<string>();// converts List to Array

IList<string> list = strArray.ToList<string>(); // converts array into list

ToDictionary - 将通用列表转换为通用字典:

相关实例:

IList<Student> studentList = new List<Student>() { 
                    new Student() { StudentID = 1, StudentName = "John", age = 18 } ,
                    new Student() { StudentID = 2, StudentName = "Steve",  age = 21 } ,
                    new Student() { StudentID = 3, StudentName = "Bill",  age = 18 } ,
                    new Student() { StudentID = 4, StudentName = "Ram" , age = 20 } ,
                    new Student() { StudentID = 5, StudentName = "Ron" , age = 21 } 
                };

//following converts list into dictionary where StudentId is a key
IDictionary<int, Student> studentDict = 
                                studentList.ToDictionary<Student, int>(s => s.StudentID); 

foreach(var key in studentDict.Keys)
	Console.WriteLine("Key: {0}, Value: {1}", 
                                key, (studentDict[key] as Student).StudentName);

运行结果:

Key: 1, Value: John 
Key: 2, Value: Steve 
Key: 3, Value: Bill 
Key: 4, Value: Ram 
Key: 5, Value: Ron

下图显示了上面示例中的studentDict如何包含键值对,其中key是StudentID,值是Student对象。


阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效: 去购买


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/Linq/linq-conversion-operators.html