拓冰建站拓冰建站
首页 / 资讯中心 / 正文

C#基础:调试存在变量,但是代码访问不到?一文教你如何处理编译时类型和运行时类型不一致!

一、情景重现我在即使窗口输入message.From[0]输出如下信息{123456 [123456qq.com](mailto:123456qq.com)} Address: 123456qq.com Domain: [qq.com](https://link.wtturl.cn/?targethttps%3A%2F%2Fqq.comsceneimaid497858langzh) Encoding: {System.Text.UTF8Encoding.UTF8EncodingSealed} IsInternational: false LocalPart: 123456 Name: 123456 Route: {}为何我写代码时访问不到Address例如我输入message.From[0].Address会显示Address变量不存在点不出 Address二、原因message.From编译时类型声明为InternetAddressList抽象基类只包含少量属性不含Address但是调试器输出的是运行时实际类型MailboxAddress它的子类C# 是强类型语言编译期只能访问声明类型的成员因此访问不到其子类内容。三、如何处理1.通过反射查询其子类即使窗口输入message.From[0].GetType()输出信息{Name MailboxAddress FullName MimeKit.MailboxAddress} Assembly: {MimeKit, Version4.17.0.0, Cultureneutral, PublicKeyTokenbede1c8a46c66814} AssemblyQualifiedName: MimeKit.MailboxAddress, MimeKit, Version4.17.0.0, Cultureneutral, PublicKeyTokenbede1c8a46c66814 Attributes: Public从中可得Name MailboxAddress是它的子类2.强制类型转化并访问知道其子类后转化一下再点出来即输入如下信息即可获取(message.From[0] as MailboxAddress)?.Address输出123456qq.com
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门