隐式类型和匿名类型之间是相同还是任何区别?如果不同,那么隐式类型和匿名类型之间的主要区别是什么?隐式类型与匿名类型
回答
有一个巨大的差别:
隐式类型(本地)变量,是哪种类型的未明确给出变量:
var i = new StringBuilder();
现在,i
是隐含StringBuilder
类型 - 命名类型。
另一边匿名类型没有名字,他们是匿名:
var x = new { Foo = "Bar" };
x是一个匿名类型的现在,随着一个只读属性Foo
。
匿名类型只能用于声明范围。因此,您可以将其用于本地任务,并且不能在外部范围中使用它。
引入了匿名类型来与linq一起使用,以实现简单的分组和转换。 主要目标是避免在单一范围内使用的显式类型声明。
List<TypeOne> firstList;
List<TypeTwo> secondList;
var joined = firstList
.GroupJoin(secondlist, i => i.KeyOfTypeOne, i => i.KeyOfTypeTwo, (first, second) => new { First = first, Second = second});
所以新的匿名类型声明,你可以用它在同样的情况下,但不能发送到当前范围的边界作为一个强类型的对象
TypeName Method() // you can't specify a type here except object or dynamic
{
...
return joined;
}
但你可以本地使用它,没有任何限制
return joined.Where(i => i.Second.Any()).Select(i => i.First);
而在另一方面,隐式类型变量是用来让你使用匿名类型的对象。 Compilator会调查你的代码,并把真正的类型,而不是var关键字。
var inst = new {Name = "a";}
compilator将产生一个匿名类型“{名称=‘A’;}”,并用它在你的代码替换变种。
你确定你不能通过动态类型返回匿名类型吗? –
您可以通过对象类型返回它,但我没有看到任何使用它的理由。 –
但是,我没有看到太多的理由,但是,你在你的帖子中说它会抛出一个编译错误。 –
从Implicitly Typed Local Variables (C# Programming Guide):
局部变量可以给出VAR代替 显式类型的推断“类型”。 var关键字指示编译器根据初始化语句右侧的表达式推断变量类型 。推断类型可以是内置类型,匿名类型,用户定义类型或.NET Framework类库中定义的类型。
另外:
了var关键字并不意味着 “变种”重要的是要理解,并不表明这个变量是弱类型,或 后期绑定。这只是表示编译器确定并指定 最合适的类型。
有匿名类型和隐式类型变量之间的关系的关键:
在许多情况下使用VAR是可选的,仅仅是一个语法 便利。然而,当一个变量与一个匿名 类型初始化必须,如果你需要在稍后访问对象的 性声明的变量VAR。
有这些
匿名类型之间的一些根本的区别:
他们有效地类类型与任何其他然后只读属性。没有方法没有事件。它们不能在本地范围之外访问/声明。例如,如果在方法内部定义,则不能在该方法外访问它们。
隐式类型的
我们可以用var
作为隐式类型。这实际上意味着表达式右侧的任何类型都将被编译器分配给该var。这些不能为空。
它们之间存在着一定的差异
隐式类型
我们可以知道哪些数据类型或类的类型分配给VAR
e.g.
var i = 10; /*here int datatype assigned*/
var A = new ArrayList(); /*here arraylist() class assigned*/
我们可以使用隐式类型也在另一个范围内。
匿名类型
当我们不知道分配给VAR
e.g.
var a = new { Age = 12 , Name = X };
匿名变量用于可能仅在被宣布范围类的哪种类型。但不能在另一个范围内使用,并且不能写回方法的语句。
通常在Linq语句中使用匿名。
- 1. 与匿名类型
- 2. 与匿名类型
- 3. 无法隐式转换类型“匿名类型#1 []”到“INT []”
- 4. C#无法隐式转换类型“System.Linq.IQueryable <<匿名类型:
- 5. 不能隐式转换类型 'system.linq.iqueryable匿名类型#1' 为byte []
- 6. 匿名类型
- 7. 匿名类型
- 8. 匿名类型
- 9. 匿名类型
- 10. 列表与匿名类型
- 11. 匿名类型与Lambda表达式
- 12. 匿名类型和泛型
- 13. Deserialise匿名类型
- 14. 匿名类型C#
- 15. 从匿名类型
- 16. C#匿名类型
- 17. 匿名类型IQueryable
- 18. 匿名类型(类功能)
- 19. 以强类型返回匿名类型
- 20. LINQ中,VB - 匿名类型不能转换为匿名类型
- 21. 无法隐式转换类型 'System.Collections.Generic.IEnumerable <匿名类型#1>' 到 'System.Array的[]'
- 22. 类型与Java泛型和匿名类不匹配
- 23. XML模式:将简单类型转换为匿名类型
- 24. 转换强类型的表达式匿名类型的返回
- 25. LINQ - 包含与匿名类型
- 26. 发送一个匿名类型与RenderPartial
- 27. 排序依据与匿名类型
- 28. C#7.0 ValueTuples与匿名类型
- 29. Moq验证与匿名类型参数
- 30. 填写DetailsView.DataSource与匿名类型
这里有一个很好的解释http://social.msdn.microsoft.com/Forums/vstudio/en-US/af2d0b6c-f1f3-4007-9f65-4418aa940c82/what-are-implicit-type-var-and-匿名类型 – christiandev