.NET2.0泛型的“近距离”实践

【Tableau】解决订阅报表PDF中文显示为乱码(方框)问题 一、问题描述 在tableau server网页端报表中文字符能正常显示,但在订阅后发送到邮箱时,以图片格式呈现的内容中中文字符显示为方框。 网页端报表能正常显示中文字符: 邮件中的报表不能正常显示中文字符: 二、问题分析 网页端字符显示情况是由html编码决定的,而tableau生成图片时是通过所部署的服务器的字体文件显示字体。因此可能是由于Linux服务器缺失相关的字体文件导致网页端选择的中文字体在服务器上缺失对应的字体文件导致的。则考虑在服务器引入对应的字体文件。 三、问题解决 1、查看服务器现有 阅读详情
  早闻 .NET 2.0中泛型的大名,但一直未在实际开发中使用。最近在开发公司项目程序的过程中体验了一下。

  应用场景:

  在配置文件中通过反序列化读取相应的邮件设置。

  配置文件示例:

<BlogConfigurationSettings>
<MailSettings>
<MailSetting Name="ApproveEmail" SmtpServer="smtp.126.com" EmailFrom="" UserName="" PassWord=""></MailSetting>
<MailSetting Name="ContactEmail" SmtpServer="smtp.163.com" EmailFrom="" UserName="" PassWord=""></MailSetting>
</MailSettings>
</BlogConfigurationSettings>

  功能说明:

  通过该配置文件,反序列化得到BlogConfigurationSettings实例的属性MailSettings,然后根据关键字得到相应的MailSetting,比如:名为ApproveEmail的MailSetting。

  MailSetting的定义:

MailSetting
[Serializable]
public class MailSetting
{
 private string _name;
 [XmlAttribute("Name")]
 public string Name
 {
  get { return _name; }
  set { _name = value; }
 }

 private string _smtpServer;
 [XmlAttribute("SmtpServer")]
 public string SmtpServer
 {
  get { return _smtpServer; }
  set { _smtpServer = value; }
 }

 private string _mailFrom;
 [XmlAttribute("MailFrom")]
 public string MailFrom
 {
  get { return _mailFrom; }
  set { _mailFrom = value; }
 }

 private string _username;
 [XmlAttribute("UserName")]
 public string UserName
 {
  get { return _username; }
  set { _username = value; }
 }

 private string _password;
 [XmlAttribute("Password")]
 public string Password
 {
  get { return _password; }
  set { _password = value; }
 }

 public string Key
 {
  get { return this.Name; }
 }

}

  如果不使用泛型,我们可以通过数组或者集合类来实现。对于数组,我们需要在BlogConfigurationSettings进行这样的定义:

private MailSetting [] __mailSettings;
[XmlArray("MailSettings")]
public MailSetting [] MailSettings
{
 get { return this._mailSettings; }
 set { this._mailSettings = value; }
}

  我们还需要写一个方法去枚举数组元素,根据关键字返回相应的MailSetting。

  对于集合类,需要在BlogConfigurationSettings进行这样的定义:

private MailSettingColletion _mailSettings;
[XmlArray("MailSettings")]
public MailSettingColletion MailSettings
{
 get { return this._mailSettings; }
 set { this._mailSettings = value; }
}

  接下来我们需要写一个MailSettingColletion类, 并且在MailSettingColletion中实现一个方法去根据关键字查找相应的MailSetting。

  对于泛型,我们只要在BlogConfigurationSettings进行如下的定义:

private List<MailSetting> _mailSettings;
[XmlArray("MailSettings")]
public List<MailSetting> MailSettings
{
 get { return _mailSettings; }
 set { _mailSettings = value;}
}

  然后只需下面的一行代码就能根据关键字得到相应的MailSetting:

BlogConfigurationSettings.MailSettings.Find(delegate(MailSetting mailSetting) { return mailSetting.Key == "ApproveEmail"; })

  Find方法的参数类型是Predicate<T>,它的定义是:

public delegate bool Predicate<T>(T obj)

  也就是一个参数为泛型,返回值为bool的委托类型。

  Find的功能就是枚举List<T>中的元素,并以每个元素作为委托的参数调用委托,实际的委托方法是通过Find参数传递过来的,当调用的委托返回true时,返回当前元素。

  你也可以将上面的Find参数中的代码写为一个单独的方法,然后将方法名作为Find的参数。

BlogConfigurationSettings.MailSettings.Find(IsMe);
public bool IsMe(MailSetting mailSetting)
{
return mailSetting.Key == "ApproveEmail";
}

  对于这样的代码,你立即会感到不舒服,这样岂不要为每个关键字写一个方法,你想应该这样写:

public bool IsMe(MailSetting mailSetting,string key)
{
return mailSetting.Key == key;
}

  这样写当然好啊,可是Find却不同意,它的参数只允许是带有一个参数的方法。

  那如何解决这个问题呢?

  我想到的一个解决方法,写一个MailSettingPredicate类:

public class MailSettingPredicate
{
private string key;

public string Key
{
get { return key; }
set { key = value; }
}

public bool IsMe(MailSetting mailSetting)
{
return mailSetting.Key == this.key;
}
}

  在调用IsMe之前,先设置MailSettingManager.Key的值,代码如下:

MailSettingPredicate predicate= new MailSettingPredicate();
predicate.Key = "ApproveEmail";
Config.Settings.MailSettings.Find(predicate.IsMe);
predicate.Key = "ContactEmail";
Config.Settings.MailSettings.Find(predicate.IsMe);


  我在实际开发中刚刚使用.NET 2.0的泛型,写这篇文章是想加深自己的理解,同时希望给不熟悉.NET 2.0泛型的朋友提供一点参考,不足之处,欢迎您指出。

{絕`戀℅ Esc .! ゛傷痕dě我 媄儷dè詤娮 沉醉清風 X.﹎耐尒﹎ ′`SeVen﹖ 綉/aiq愾ゃ 亡命天涯 ㄋ無橫‰Max 牛B--74110 -尕冞。 ぃˇ续鱈.ヾo 沙果 just only μ 快乐小孩 ﹎v 丄偙爬ヤ 蓝天下的云 ぷ笨女魜の 名字給誰看? {●凄ざメ 心灵的颜色 可乐 /.╅Wo灬 /mg耶稣/li の儍尐籽の 酷少 〆葬じ☆ve. -[莪]灬铭少, 妙龄少女 ヤ狼雨恋ヤ ¨???俊少 ゞ歲月無痕ゞ INotLove上网 o ╱/●惢痛ㄋ ′辣椒﹏〉 文利 滴雨 八戒如来神掌 靚♂京京 贱女~~ㄣ滚滚 Β b籽.﹖ |゛丹 、`` 愛妳壹身♂ 龙 晨/hl ☆百年寂寞☆ Deepin 遊城のKnight ★肖嘉春★ ㄣ樶後⒈頁 為伱筷楽/tp    .儍. ℡百川 _﹎ 功夫之子 繼續頹廢.. bnnn の★‰BOBO# 拒绝再爱 飞 メ壩朢あ帅风 蓝/xin天/nv/ 天使の城堡 ·.·.丄=貨 ソo 唸. 〣℡angel◇ 炳:v8:─) 
 

Kerberos基础及KDC服务(理论知识) kerberos基础理论讲解+KDC服务 阅读详情

相关推荐

Win10下Altera USB-Blaster驱动安装详解:禁用数字签名与排查指南

在嵌入式开发和FPGA调试过程中,驱动安装是工程师绕不开的环节,尤其是当操作系统对驱动签名有严格限制时,硬件往往无法被正常识别。数字签名是系统验证驱动程序来源和完整性的重要机制,Win10出于安全考虑,默认拒绝加载未经签名的驱动,这正是Altera USB-Blaster下载器在设备管理器中显示未知设备或黄色感叹号的根本原因。通过理解设备管理器的排查逻辑,掌握临时禁用驱动强制签名或开启测试模式的方法,配合正确的驱动文件路径选择与手动安装操作,即可解决Quartus无法检测到下载器的问题。这一流程同样适用于许

weixin_29164497的博客 245

单片机项目|采用STM32实现近距离锂电池无线充电系统硬件设计

本研究旨在探索近距离锂电池无线充电系统的设计与优化,采用近场耦合式无线供电技术,确保电能传输的安全和高效,系统整体通过设计单片机主控模块、显示模块、电能监控模块、电能发射模块和电能接收模块,实现系统的整体设计。其中,单片机主控模块负责系统运行控制和数据处理,电能监控模块监测充电过程的关键参数,显示模块利用OLED显示充电信息,电能发射模块和接收模块实现电能传输和充电功能。这些模块相互配合,构成了完整的近距离锂电池无线充电系统,提升了充电效率和用户体验。

软件开发实战项目分享 1769

PADS VX2.4差分对设置避坑指南:常见错误与解决方案

本文深度解析了在PADS VX2.4中进行高速PCB设计时,差分对设置的核心要点与常见陷阱。针对Layout规则设置、Router布线实战中的阻抗控制、线长匹配等关键环节,提供了具体的避坑指南和解决方案,帮助工程师确保信号完整性,提升设计质量。

weixin_29216049的博客 359

视频教程-C#入门精讲9集合-C#

C#入门精讲9集合 徐照兴,教研室主任,硕士,副教授,专业建设委员会主任,微...

weixin_30875773的博客 184

【GPIO模拟串口通信协议】

由于这段时间搞了个安卓相关的项目,需要和安卓进行Uart通信。但是选用的芯片并没有自带uart功能,所以在充分评估项目后,考虑波特率不高的情况下,决定使用GPIO去模拟串口通信协议了。

学海无涯苦作舟 2638

【Unity Shader】2D模型 3D模型混用的穿模问题(Spine在3D场景中出现前后穿模问题的解决办法)

问题描述: 在3D场景中使用Spine模型(2D), 因为Spine需要像Billboard类似的处理,永远是垂直与相机的, 所以一般情况下2D模型能正常显示且前后的阻挡关系也是没有问题的,如下图所示,一切都很美好.(这里用一个四边形,图中的福字表示2D模型) 可是如果后面蓝色的格子比较高,或者2D角色本身也比较高,那么就会出现模型穿插的问题,如下图所示: 如果吧2D模型竖立起来,前后关系肯定是没有问题的,所以也能避免模型穿插的问题,可是就没有Billboard效果,圆形的福字已经被压扁了,如下图:

Vitens的专栏 4590

北京.NET俱乐部2007年12月2日活动通知

  创新与突破 - 北京.NET俱乐部Visual Studio2008 & Windows Server2008 交流会         作为微软企业级应用平台的核心部分,微软下一代服务器操作系统 Windows Server 2008和新一代开发工具 Visual Studio 2008,将于 2008 年春天一同面市。此两款核心产品因集成了大量令人兴奋的创新功能和技术,而倍受 IT 业界瞩目

关注移动互联网创业-葛涵涛 8633

从EXIF到测绘:解码大疆影像元数据的实战应用指南

本文深入解析了大疆无人机影像元数据的实战价值,重点阐述了如何利用EXIF和XMP中的GPS、RTK、姿态角及相机内参等关键信息,提升测绘、三维重建及精准农业等项目的成果精度与效率。通过自动化质检脚本与行业应用场景剖析,指导从业者将元数据从信息转化为生产力,实现从拍照到专业测绘的跨越。

dell8的博客 525

.NET技术书籍推荐

<br />在首页上看到了一篇文章,上面有一条评论是:学.NET的过程,其实也是一个选书的过程。<br />于是就萌生了写这个的想法,但是就不发到首页了,免得遭高人骂。随便无聊写写而已。<br />从写下第一行的Hello world已经快一年半的时间了,虽然时间不长,但是个人感觉自己真的很努力了。<br />下面就列举出自己从第一天开始到现在看过的书,并且给出我的评分(10 分满分)(随时更新):<br />(废话一句:很多人说书非借不能读也,其实我不赞成,我很少借书,也不看电子书,还是觉得实体书看起来比

fctisdam的专栏 1246

PayPal支付集成完全指南:开源库实践

本文介绍了如何从零开始集成PayPal支付功能。首先概述了PayPal提供的多语言SDK和开源库,包括PHP、Python、Node.js等版本。然后详细说明了准备工作,包括注册开发者账号、获取API凭证和使用沙盒环境测试。文章以Node.js为例,演示了安装SDK、基础配置和实现支付流程的完整代码,包括创建订单和捕获支付两个核心功能。最后提及了订阅支付等高级功能,为开发者提供了完整的支付集成方案。通过清晰的代码示例和步骤说明,帮助开发者快速实现PayPal支付功能集成。

2501_93501927的博客 1257

ESP32-IDF开发实例-外部Flash与FatFs文件系统数据存取

FatFs是用于小型嵌入式系统的通用FAT / exFAT文件系统模块。FatFs模块是按照ANSI C(C89)编写的,并且与磁盘I/O层完全分开。因此,它独立于平台。它可以并入资源有限的小型微控制器中,例如8051,PIC,AVR,ARM,Z80,RX等。ESP32-IDF对FatFs提供了良好的支持。

视觉与物联智能 2915

视频教程-C#.NET_面向对象编程技术-.NET

C#.NET_面向对象编程技术 20年IT从业经历,精通C#.NET编程,C...

weixin_28867829的博客 251

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

.NET 8.0 &#x2B; Linux 香橙派,实现高效的 IoT 数据采集与控制解决方案

前言 随着物联网(IoT)技术的迅猛发展,智能设备之间的互联互通变得越来越重要。 推荐一套基于 C# 的高效 IoT 系统,该系统运行在 Linux 开发板上,并支持 Modbus RS485 传感器、NPN/PNP 开关等所有符合 485 通讯协议的设备进行数据采集和指令发送。这套系统在为智能家居

fenfenfen520a的博客 87

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

.NET 传奇第二版章节说明

一言难尽的故事和背后的技术细节、可能的政治斗争,以及社区的反应和影响,都将会在这一章中进行深入的探讨和分析。.NET 5 的发布,标志着微软在统一 .NET 平台方面迈出了重要的一步,虽然 .NET 6 和 .NET 7 在功能和性能上都有显著的提升,但 .NET 5 的意义在于,它确立了一个新的发展方向和目标,让开发者们看到了一个更加统一、现代化的 .NET 生态系统的未来。这些项目虽然在市场上的份额可能不如微软的产品,但它们在技术创新和社区参与方面都做出了不少贡献,也为开发者提供了更多的选择和可能性。

dotNET跨平台 39

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

视频教程-TensorFlow 2.0 三大项目实战-深度学习

TensorFlow 2.0 三大项目实战 京东机器视觉算法工程师,华为认证...

weixin_33872384的博客 953

视频教程-初级学软件之ASP.NET第三季 ASP.NET控件的使用-.NET

初级学软件之ASP.NET第三季 ASP.NET控件的使用 从事软件开发10...

weixin_29446091的博客 163

视频教程-毕业设计ASP.NET三层架构校园二手闲置交易网站源码成品代码详解-C#

毕业设计ASP.NET三层架构校园二手闲置交易网站源码成品代码详解 研发工程...

weixin_31720333的博客 1148

《ASP.NET MVC 5 框架揭秘》

《ASP.NET MVC 5 框架揭秘》 基本信息 作者: 蒋金楠    出版社:电子工业出版社 ISBN:9787121237812 上架时间:2014-8-1 出版日期:2014 年8月 开本:16开 页码:656 版次:1-1 所属分类:计算机 &gt; 软件与程序设计 &gt; .NET &gt; ASP.NET   更多关于》》》 《ASP.NET MVC 5 框...

weixin_34268610的博客 372

.NET 8.0 + Linux 香橙派,实现高效的 IoT 数据采集与控制解决方案

合集 - .NET 开源物联网(8)1.IoTSharp:基于 .NET 8.0 的开源物联网平台2024-08-222..NET 8 跨平台高性能边缘采集网关2024-08-123..NET 免费开源工业物联网网关2024-08-074..NET 跨平台工业物联网网关解决方案2024-09-295..NET 工控网关 轻量级组态软件2024-10-116.推荐一款强大的开源物联网 Web 组态软...

weixin_36030121的博客 272

视频教程-初级学软件之ASP.NET 第七季 Web Services-.NET

初级学软件之ASP.NET 第七季 Web Services 从事软件开发1...

weixin_29494889的博客 100

视频教程-深入.NET平台和C#编程-C#

深入.NET平台和C#编程 资深大数据、java讲师,十年开发经验,曾经任职...

weixin_30219307的博客 341

视频教程-赢在.NET面试求职-招聘/面试

赢在.NET面试求职 《ASP.NET MVC企业级实战》作者,.Net工程...

weixin_29502701的博客 325

视频教程-.net core快速开发框架-.NET

.net core快速开发框架 30年软件开发经验,精通.net,java,...

weixin_34245522的博客 1059
上一篇: .NET开发Silverlight程序:界面和对象模型
下一篇: ASP.NET Ajax调用WCF服务示例dudu
computer_it
博客等级 码龄19年 0粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值