gpt4 book ai didi

c# - c#中没有类名的新关键字

转载 作者:太空狗 更新时间:2023-10-29 20:53:06 26 4
gpt4 key购买 nike

在浏览 ASP.NET MVC 文档时,我看到这个习惯用法被大量使用:

new { foo = "bar", baz = "foo" }

这是字典文字语法吗?它是由被调用函数定义推断出的类型的新类/结构吗?如果是,为什么 var 不需要类型定义,甚至 var 也不需要?

最佳答案

这是一个匿名类型。

Anonymous types provide a convenient way to encapsulate a set of read-only properties into a single object without having to explicitly define a type first. The type name is generated by the compiler and is not available at the source code level. The type of each property is inferred by the compiler.

http://msdn.microsoft.com/en-us/library/bb397696.aspx

  • 匿名类型是强类型的。从公共(public)语言运行时的角度来看,匿名类型与任何其他引用类型没有什么不同。

  • 如果同一程序集中的两个或多个匿名类型具有相同数量和类型的属性,并且顺序相同,编译器会将它们视为同一类型。它们共享相同的编译器生成的类型信息。

  • 匿名类型不应在程序集之间传递,甚至不应作为 return values 传递。来自方法(可能,但很少,很少可取)。

  • 匿名类型是一种方便的机制,例如使用 LINQ 时,例如以下 projection :

LINQ 示例

var result = myEnumerable.Select( o => new { foo = o.Foo, bar = o.Bar } );
// "result" is an enumerable of a new anonymous type containing two properties

其他问题

Is this a Dictionary literal syntax?

不,虽然有很多相似之处。 ASP .Net MVC 使用 RouteValueDictionary 和匿名类型来表示许多方法重载中的相同信息。

how come the vars don't need a type definition, not even var?

值类型被推断出来,尽管推断并不总是可能的:http://msdn.microsoft.com/en-us/library/bb531357.aspx (VB 版本,如果有人知道 c# 等价物的 URL,请更新)

关于c# - c#中没有类名的新关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12739057/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com