InfoQ Geekathon 大模型技术应用创新大赛 了解详情
写点什么

另一种眼光看 VB 中的匿名类型

  • 2008-01-25
  • 本文字数:773 字

    阅读完需:约 3 分钟

C#中的匿名类型非常简单,因为这些匿名类型都是不可变的。而 VB 却同时支持可变和不可变的匿名类型,对于这两种匿名类型,实现和使用的规则也略有不同。

不可变的匿名类型

C#和 VB 中的不可变匿名类型完全相同。这些匿名类型都是一些只读的属性集合,还包含有 Equals、ToString、GetHashCode 等方法的重载。从反编译的代码中可以看出,二者的实现存在着些许不同,不过结果却是一样的:Equals 和 GetHashCode 方法都基于类型中的所有字段计算得出。

C#只允许我们使用不可变的匿名类型。而在 VB 中若想得到不可变的匿名类型,我们需要使用 Select 子句或者在类型中每个字段前面加上 Key 关键字,例如:

var a = new { Name = “Tom”, Age = 25 };
[…] Select c.Name, c.Age
[…] Select New With {Key c.Name, Key c.Age}
Dim a = New With {Key .Name = “Tom”, Key .Age = 25}

可变的匿名类型

相对于不可变匿名类型,VB 中可变的匿名类型则简单得多。这些类型没有 Equals 或 GetHashCode 方法,因此若想比较两个对象,我们必须手工进行。可变的匿名类型也不会自动为字段生成属性的 Setter。

例如:

[…] Select New With { c.Name, c.Age}
Dim b = New With { .Name = “Tom”, .Age = 25}

部分可变的匿名类型

若是匿名类型中的某些(但不是全部)字段被标记为 Key,那么我们就创建了一个部分可变的匿名类型。对于这种类型,标记为 Key 的字段是只读的,而没有标记为 Key 的字段则可读可写。

对于部分可变的匿名类型,使用其 Equals 或 GetHashCode 方法必须格外小心——只有标记为 Key 的字段将用于这两个方法中的计算,而其他可变的字段将被忽略。这样的实现有利于把可变字段放置在哈希表中,以提高查询时的效率。

例如:

[…] Select New With {Key c.Name, c.Age}
Dim c = New With {Key .Name = “Tom”, .Age = 25}

查看英文原文: Another Look at Anonymous Types in VB

活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2008-01-25 21:27781
用户头像

发布了 37 篇内容, 共 78318 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的限流器RateLimiter功能服务

洛神灬殇

分布式 限流器 三周年连更 动手实现 RateLimter

Java多线程基础

timerring

Java

async/await详解

不叫猫先生

JavaScript async/await 三周年连更

【问题排查篇】一次业务问题对 ES 的 cardinality 原理探究 | 京东云技术团队

京东科技开发者

ES 京东云 企业号 5 月 PK 榜

机器人SLAM,三维人工智能的核心技术!

博文视点Broadview

Zebec生态发展进入加速期,拿好ZBC坐等价值兑现

石头财经

Zebec生态发展进入加速期,拿好ZBC坐等价值兑现

股市老人

开源项目LuckyDraw分享&介绍

小张想搞机

小程序 开源 开发 GitHub、 项目上线

Java实现坦克大战1.0

timerring

Java

1分钟学会、3分钟上手、5分钟应用,快速上手责任链框架详解 | 京东云技术团队

京东科技开发者

Netty 京东云 企业号 5 月 PK 榜

Zebec生态发展进入加速期,拿好ZBC坐等价值兑现

EOSdreamer111

深入理解shims-vue.d.ts和declare module

Lee Chen

JavaScript

去哪儿网企业级监控平台-Watcher

Qunar技术沙龙

去哪儿网 监控平台

Istio数据面新模式:Ambient Mesh技术解析

华为云开发者联盟

云原生 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

谁说前端已死,低代码没干掉我,chatGPT又如何!| 社区征文

花花

三周年征文

Zebec生态发展进入加速期,拿好ZBC坐等价值兑现

西柚子

Markdown基础语法教程

小张想搞机

学习 markdown markdown语法 markdown编辑器 基础

服务网格(Service Mesh)是什么?

乌龟哥哥

三周年连更

【上进小菜猪】深入了解Hadoop:HDFS、MapReduce和Hive

上进小菜猪

hadoop 上进小菜猪

手把手教会你 | 网络编程

TiAmo

socket通信 服务器编程 单用户模式

MySQL一次大量内存消耗的跟踪

GreatSQL

Flink应用开发

阿泽🧸

flink 三周年连更

下载LORA模型

IT蜗壳-Tango

三周年连更

matlab实现通信原理

袁袁袁袁满

三周年连更

使用 NutUI 搭建「自定义业务风格」的组件库 | 京东云技术团队

京东科技开发者

京东云 企业号 5 月 PK 榜

云原生典型应用架构

穿过生命散发芬芳

云原生架构 三周年连更

数据导向下制造业的生产效率、交易效率提升办法

镭速

《AGI时代的破局之道 | 社区征文》

后台技术汇

三周年征文

使用MASA全家桶从零开始搭建IoT平台(二)设备注册

MASA技术团队

IoT mqtt

路由器的后台管理界面的IP地址为什么都是192.168开头?

wljslmz

网络 三周年连更

前端配置化表单组件设计方法 | 京东云技术团队

京东科技开发者

前端 表单设计 配置化 企业号 5 月 PK 榜

  • 扫码添加小助手
    领取最新资料包
另一种眼光看VB中的匿名类型_.NET_Jonathan Allen_InfoQ精选文章