C#中的“var”类型推断今天我很惊讶地发现以下......SqlDataReaderreader=cmd.ExecuteReader();DataTableschemaTable=reader.GetSchemaTable();//下面的代码编译正确foreach(DataRowfieldinschemaTable.Rows){}//以下代码无法编译,因为'var'的类型为'object'foreach(schemaTable.Rows中的var字段){//错误:无法将使用[]的索引应用于'object'类型的表达式Console.WriteLine(字段[“列名”]);}这里发生了什么?这是类型推断失败吗?如果是这样,是什么原因造成的?还是定义的行为或变量?如果是这样,为什么?我认为var的想法是你可以在变量声明/初始化的任何地方使用它而不改变行为。这里的重点不是var,而是foreach循环。除了迭代自身之外,foreach循环还可以选择转换迭代器。所以你可以这样做:Listtest=newList();测试。添加(1);测试。添加(2);测试。添加(3);foreach(测试中的inti){i.Dump();因此,即使list是object类型,在foreach中也可以自由转换为int。DataTable.Rows返回System.Data.DataRowCollection,它是InternalDataCollectionBase的子类。GetEnumerator方法因此返回IEnumerator,而不是IEnumerator。因此,唯一可用的类型信息是它返回对象,因此当您指定枚举DataRow时,您将添加自己的转换,而var则不会。令人困惑的是,foreach(SomeTypethinginSomeCollection)不仅遍历集合,它还在遍历时尝试将每个项目转换为SomeType。但是对于var没有什么可以转换的。以上就是《C#学习教程:C#中的“var”类型推断》的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
