加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 18:07:44 所属栏目:百科 来源:网络整理
导读:在浏览ASP.NET MVC文档时,我看到这个习惯用法很多: new { foo = "bar",baz = "foo" } 这是字典文字语法吗? 它是一个新的类/结构,其类型由被调用的函数定义推断出来? 如果是这样的话,变量不需要类型定义,甚至不是var? 解决方法 这是一种匿名类型. Anonymo
在浏览ASP.NET MVC文档时,我看到这个习惯用法很多:
new { foo = "bar",baz = "foo" }

这是字典文字语法吗?
它是一个新的类/结构,其类型由被调用的函数定义推断出来?
如果是这样的话,变量不需要类型定义,甚至不是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

>匿名类型是强类型的.从公共语言运行库的角度来看,匿名类型与任何其他引用类型没有区别.
>如果同一程序集中的两个或多个匿名类型具有相同的数量和类型的属性,则按相同的顺序,编译器将它们视为相同的类型.它们共享相同的编译器生成的类型信息.
>匿名类型不应该在程序集之间传递,甚至不能从方法传递到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,请更新)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读