当前位置: 首页 > 编程日记 > 正文

分享.NET开发中经常使用到的代码片段 完全从实际项目中提取出来,也可被反反复复的重复借用...

几年前,一篇《ASP.NET开发人员经常使用的三十三种代码》非常流行,它总结了一些经常在ASP.NET开发中使用到的代码,直接可以拿来使用。今天重读这篇文章,有感而发,善于总结也是进步,于是我也从我的项目中总结一些常用的代码片段,分享给各位园友。

写文本文件

TextWriter tw = new StreamWriter("date.txt");
tw.WriteLine(DateTime.Now);
tw.Close();


读文本文件

写法一
Textreader tr = new StreamReader("date.txt"); Console.WriteLine(tr.ReadLine()); tr.Close(); 写法二
StreamReader reader = new StreamReader("date.txt");
Console.WriteLine(reader.ReadLine()); 
reader.Close(); 
 

其实,上面的写文本文件和读文本文件,都有一个bug,当程序中有代码改变当前目录时,date.txt的目录就是这个被改变的目录,而不是我们期待的当前应用程序所有的目录。所以,推荐的写法是这样的

string file = "Cnblogs.txt";
string cnblogs = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, file);
if (File.Exists(cnblogs))
{using (StreamReader reader = File.OpenText(cnblogs)){rtfCnblogs.Text = reader.ReadToEnd();}
}

加入了完整的文件名路径,这样才是正确的读写文件的方法。如果是ASP.NET应用程序,可以用Server.MapPath代替,

或是HttpContext.Current.Request.PhysicalApplicationPath。

跨线程访问控件

delegate void dSetText(string text);
private void SetText(string text){                
      if (InvokeRequired)      
      {    
          dSetText d = new dSetText(SetText);       
          this.Invoke(d);      
      }  
      else{       
       this.textBox1.Text = ; 
      }}
 

调用Code Smith模板

CodeTemplateCompiler compiler = new CodeTemplateCompiler(@"c:\test.cst");
compiler.Compile(); if (compiler.Errors.Count == 0){
CodeTemplate t = compiler.CreateInstance();
this.txtSql.Text = t.RenderToString();
} 
compiler.Cleanup();
compiler = null;

如果是x64的系统,请设置Target为x86(need to set the program to compile as X86)。

设置程序集运行时版本

当旧的程序是以.NET 2.0编译的,又无法升级到.NET 4.0,而有部分组件是以.NET编译的,在运行时,会抛出混合程序集的异常,需要修改配置文件,请参考这个片段

<?xml version ="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<requiredRuntime safemode="true" imageVersion="v4.0.30319" version="v4.0.30319"/>
</startup>
</configuration>

这个需求源于,Code Smith 5.0是以.NET 2.0编译的。在我的代码生成可器中,它用来反射读取程序集信息,生成代码,而这个被读取的程序集的Target是.NET 4.0,这时,你需要这个技巧来解决运行时的问题。

另一个场景是ILMerge,用于合并.NET程序集的工具,只有.NET 2.0的版本,要可以合并.NET 4.0的程序集,也需要运用这个技巧(ILMerge config file for executing within the CLR v4.0 runtime)。

枚举类型的反射调用

在有些场景,我们需要把反射的参数值传到对象的方法中,而参数值是enum类型,这实现起来并不简单。

请参考codeproject中这的篇文章《Setting Enum's Through Reflection 》,它的经典代码是这样的

int enumValue1 = (int)enumItem1.GetValue(enumType);
int enumValue2 = (int)enumItem2.GetValue(enumType);
int currentValue = (int)flagsInfo.GetValue(remoteObject, null);
int newValue = currentValue | enumValue1 | enumValue2;

举例说明,我需要反射生成ReportViewer控件的对象实例,并且要传一个Mode值给它(Server,LocalReport)以表示是本地报表,还是取服务器报表。这种情况下,非得用反射的方式传入值。

在我的.NET通用平台中,也应用到这项技术,以反射方式创建CrystalReportViewer报表控件,再传入参数值。这种方式稍微复杂一些,但是对比它带来的灵活性,是非常值得的。

目录选择功能

FolderBrowserDialog dlg = new FolderBrowserDialog();
if (!string.IsNullOrEmpty(txtPath.Text))dlg.SelectedPath = txtPath.Text;
if (dlg.ShowDialog() == DialogResult.OK)
{txtPath.Text = dlg.SelectedPath;
}
 

文件选择功能

OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = "All File(*.*)|*.*";
if (dlg.ShowDialog() == DialogResult.OK)
{txtPath.Text = dlg.FileName;
}     

Filter是经常容易忘记的选项,再举一个例子

dlg.Filter = "Xml file (*.xml)|*.xml|All Files|*.*";

 

读取嵌入到程序集中的资源文件

Assembly assm = Assembly.GetAssembly(typeof(DatabaseCleanup));
string file = "DatabaseCleanup.txt";
Stream input = assm.GetManifestResourceStream("DataLoader.Resource" + "." + file); 
StreamReader reader=new StreamReader(input);
string sql=reader.ReadToEnd();
reader.Close();
只要可能,对只读的不需要修改的配置选项资源(SQL语句,文本文件),尽可能的使用Embedded Resource方式。

微软企业库的调用方式

经过一层简单的封装,以下面的这种方式来调用企业库以访问数据库

EnterpriseLibraryShared.ConnectonString =ConnectionString;
Microsoft.Practices.EnterpriseLibrary.Data.Database m_commonDb = DatabaseFactory.CreateDatabase();
DbCommand cmd = m_commonDb.GetSqlStringCommand(sql);
int rowAffected = m_commonDb.ExecuteNonQuery(cmd);

我把企业库的连接字符串放到一个static class中,这样可以简化调用方式,不必要一定要加App/Web.config文件。

监控文件或目录的变化

这个功能比较常用,在Data Loader也有一个PDF Watcher的程序,以监控指定的目录是否有新加入的PDF文件(可能来自远程传输,或是从网页中下载回来),然后对它进转换,导入到文档服务器中。

public void StartMonitor(string path)
{          FileSystemWatcher watcher = new FileSystemWatcher();watcher.Path = path;watcher.NotifyFilter = NotifyFilters.FileName;// Only watch pdf files.watcher.Filter = "*.pdf";watcher.Created += new FileSystemEventHandler(OnChanged);watcher.EnableRaisingEvents = true;
}// Event handler for when a  file is created in the watched folder
private void OnChanged(object source, FileSystemEventArgs e)
{string word = DocumentUtility.ConvertPdfToDoc(e.FullPath);
}

希望可以帮助到你。

转载于:https://www.cnblogs.com/JamesLi2015/archive/2011/12/01/2269996.html

相关文章:

Console-算法-冒泡排序法|倒水法

ylbtech-Arithmetic:Console-算法-冒泡排序法|倒水法1.A&#xff0c;案例-- -- ylb&#xff1a;算法 -- type&#xff1a;冒泡法排序 -- thankyou:sunshine, 谢谢你的默默付出 -- 10:50 2012-04-06 -- 1.B&#xff0c;解决方案1.B.1,算法一 using System;namespace ConsoleAp…

Python中如何使用构造方法定义类

每个类都有一个默认的__init__()方法&#xff0c;如果在定义类时显式地定义了__init__()方法&#xff0c;则创建对象时Python解释器会调用显式定义的__init__()方法;如果定义类时没有显式定义__init__()方法&#xff0c;那么Python解释器会调用默认的__init__()方法。 __init__…

vs中将网站aspx.cs文件打包成一个dll

vs中将网站aspx.cs文件打包成一个dll 23小时前 vs中将网站asp.net cs文件打包成一个dll。 在vs2008以上的版本中可以建立web应用来开发网站&#xff0c;这样网站aspx.cs文件【生成网站】的时候就会自动生产单个dll&#xff0c;如果使用的是网站的话那就不能。那介绍一种微软提…

刻意练习:LeetCode实战 -- Task05. 最接近的三数之和

背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法&#xff08;Leetcode&#xff09;刻意练习训练营 的打卡任务。本期训练营采用分类别练习的模式&#xff0c;即选择了五个知识点&#xff08;数组、链表、字符串、树、贪心算法&#xff09;&#xff0c;每个知识点选择了…

ECMAScript6——Set数据结构

/*** 数据结构 Set*/// ----------------------------------------------------- /*** 集合的基本概念&#xff1a;集合是由一组无序且唯一&#xff08;即不能重复&#xff09;的项组成的。这个数据结构使用了与有限集合相同的数学概念&#xff0c;应用在计算机的数据结构中。*…

UI设计培训需要学哪些内容

想要学习UI设计并没有想象中那么简单的&#xff0c;UI设计需要学习的内容有很多&#xff0c;那么具体UI设计培训需要学哪些内容呢?来看看下面小编的详细介绍就知道了。 UI设计培训需要学哪些内容? 在ui设计中&#xff0c;需要的基础是一些简单的美术基础和平面设计基础&#…

4.html 头部随笔

1、html头部标记<base>&#xff1a;当前文档的URL全称&#xff08;基底地址&#xff09;<basefont>&#xff1a;设定基准的文字字体、字号和颜色<title>&#xff1a;网页标题<isindex>&#xff1a;表明文档是一个可用于检索的网管脚本&#xff0c;有服…

Python统计字符串中的中英文字符、数字空格,特殊字符

# -*- coding:utf8 -*-import stringfrom collections import namedtupledef str_count(s): 找出字符串中的中英文、空格、数字、标点符号个数 count_en count_dg count_sp count_zh count_pu 0 s_len len(s) for c in s: # 英文 if c in stri…

刻意练习:LeetCode实战 -- Task07. 合并两个有序链表

背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法&#xff08;Leetcode&#xff09;刻意练习训练营 的打卡任务。本期训练营采用分类别练习的模式&#xff0c;即选择了五个知识点&#xff08;数组、链表、字符串、树、贪心算法&#xff09;&#xff0c;每个知识点选择了…

Java入门培训班怎么选择

想要学习java技术&#xff0c;小编一直给小伙伴推荐的是报班学习&#xff0c;目前市面上的java培训机构有很多&#xff0c;对于java培训班的选择很多小伙伴都比较迷茫&#xff0c;下面小编就为大家详细的介绍一下Java入门培训班怎么选择的问题。 Java入门培训班怎么选择?一般正…

开源图形库 FreeImage

一个自由、开源的图形库--FreeImage (支持位图构件―例 如调色板和数据位―的便易访问&#xff1b;将位图从一种位深度转换到另一种位深度&#xff1b;当有多幅位图页―例如TIFF―时访问位图的不同页&#xff1b;基本的位图处理&#xff0c;如旋转、翻 转&#xff08;flipping&…

刻意练习:LeetCode实战 -- Task08.删除排序链表中的重复元素

背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法&#xff08;Leetcode&#xff09;刻意练习训练营 的打卡任务。本期训练营采用分类别练习的模式&#xff0c;即选择了五个知识点&#xff08;数组、链表、字符串、树、贪心算法&#xff09;&#xff0c;每个知识点选择了…

notepad++ 快捷键

2019独角兽企业重金招聘Python工程师标准>>> 1. 文件相关 快捷键动作定义Ctrl-O打开文件Ctrl-N新建文件Ctrl-S保存文件Ctrl-Alt-S文件另存为Ctrl-Shift-S保存所有打开文件Ctrl-P打印Alt-F4退出程序Ctrl-Tab文件标签跳转&#xff0c;跳至下一个打开文件Ctrl-Shift-Ta…

怎样使用Spring Boot项目的单元测试

在实际开发中&#xff0c;每当完成一个功能接口或业务方法的编写后&#xff0c;通常都会借助单元测试验证该功能是否正确。Spring Boot对项目的单元测试提供了很好的支持&#xff0c;在使用时&#xff0c;需要提前在项目的pom.xml文件中添加spring-boot-starter-test测试依赖启…

关于生成id的问题

表明表最大id 方法1&#xff1a; GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[getserial] serialname char(30) AS begin declare serialno int begin transaction select serialno SV_nSerial from SystemVariable with(TABLOCKX HOLDLOCK…

刻意练习:LeetCode实战 -- Task09. 环形链表

背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法&#xff08;Leetcode&#xff09;刻意练习训练营 的打卡任务。本期训练营采用分类别练习的模式&#xff0c;即选择了五个知识点&#xff08;数组、链表、字符串、树、贪心算法&#xff09;&#xff0c;每个知识点选择了…

CentOS学习笔记 - 9. docker maven编译基于gofabric8的java应用镜像

2019独角兽企业重金招聘Python工程师标准>>> 续上一篇 1. 修改java工程的pom.xml &#xff0c; 加入docker编译插件 <plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.0.0</…

Java虚拟机中获得Runtime实例的方法是什么?

Runtime类用于表示Java虚拟机运行时的状态&#xff0c;它用于封装Java虚拟机进程。每次使用“java”命令启动Java虚拟机时都会对应一个Runtime实例&#xff0c;并且只有一个实例&#xff0c;应用程序会通过该实例与其运行时的环境相连。应用程序不能创建自己的Runtime实例&…

仿百度文库方案[openoffice.org 3+swftools+flexpaper](三) 之 使用JODConverter将office文档转换为pdf...

第三步&#xff0c;使用JODConverter将office文档转换为pdf JODConverter是一个java的OpenDucument文件转换器&#xff0c;可以进行许多文件格式的转换&#xff0c;它利用 OpenOffice来进行转换工作&#xff0c;它能进行以下的转换工作&#xff1a; 1.Microsoft Office格式转换…

刻意练习:LeetCode实战 -- Task10. 两数相加

背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法&#xff08;Leetcode&#xff09;刻意练习训练营 的打卡任务。本期训练营采用分类别练习的模式&#xff0c;即选择了五个知识点&#xff08;数组、链表、字符串、树、贪心算法&#xff09;&#xff0c;每个知识点选择了…

Ether-channel 以太网通道

Ether-channel通常称之为以太网链路捆绑&#xff0c;或者叫链路汇聚&#xff0c;链路聚合。作用&#xff1a;将多个类似的接口&#xff0c;捆绑成一个逻辑接口&#xff0c;从而增加设备之间的传输带宽增加设备之间的连接可靠性不但可以在链路设备之间形成链路备份&#xff0c;还…

web前端开发培训有哪些学习阶段

​ web前端技术主要针对于移动互联网是比较多的&#xff0c;对于零基础的同学来说前期主要学习基本的静态布局&#xff0c;HTML CSS&#xff0c;下面是web前端开发培训有哪些学习阶段的具体内容。 ​ web前端开发培训有哪些学习阶段? 一、html5如何学习 1.HTML5 CSS3 JQ …

自己动手重新实现LINQ to Objects: 9 - SelectMany

本文翻译自Jon Skeet的系列博文“Edulinq”。 本篇原文地址&#xff1a; http://msmvps.com/blogs/jon_skeet/archive/2010/12/27/reimplementing-linq-to-objects-part-9-selectmany.aspx 我们接下来要实现的这个操作符是LINQ中最重要的操作符。大多数&#xff08;或者是全部…

1.8 centos7 的PATH、cp/mv/文档查看命令介绍

环境变量PATH什么是环境变量&#xff1f;环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数&#xff0c;如&#xff1a;临时文件夹位置和系统文件夹位置等。[rootcentos7 ~]# echo $PATH #查看PATH环境变量 /usr/local/sbin:/usr/local/bin:/usr/sbin…

刻意练习:LeetCode实战 -- Task11. 删除链表的倒数第N个节点

背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法&#xff08;Leetcode&#xff09;刻意练习训练营 的打卡任务。本期训练营采用分类别练习的模式&#xff0c;即选择了五个知识点&#xff08;数组、链表、字符串、树、贪心算法&#xff09;&#xff0c;每个知识点选择了…

https和http有什么区别?看下面介绍就知道了!

https和http有什么区别?相信很多还在学习软测的同学们&#xff0c;都会有遇到这种问题&#xff0c;下面就是小编给大家介绍的http相关的知识 。 一、http和https基本概念 1. HTTP&#xff1a;是互联网上应用最为广泛的一种网络协议&#xff0c;是一个客户端和服务器端请求和应…

C#图片灰度处理(位深度24→位深度8),用灰度数组byte[]新建一个8位灰度图像Bitmap 。...

原文:C#图片灰度处理(位深度24→位深度8) #region 灰度处理/// <summary>/// 将源图像灰度化&#xff0c;并转化为8位灰度图像。/// </summary>/// <param name"original"> 源图像。 </param>/// <returns> 8位灰度图像。 </return…

日期NSDate的使用

日期类NSDate,存储的是世界标准时(UTC)&#xff0c;输出时需要根据时区转换为本地时间方法description字符串以GMT0展示日期如&#xff1a;2011-11-16 07:02:25 0000测试的北京时间&#xff1a;2011-11-16 15:02:25.324/))))((((/格式化日期类型&#xff0c;使用NSDateFormatte…

刻意练习:LeetCode实战 -- Task12. 合并K个排序链表

背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法&#xff08;Leetcode&#xff09;刻意练习训练营 的打卡任务。本期训练营采用分类别练习的模式&#xff0c;即选择了五个知识点&#xff08;数组、链表、字符串、树、贪心算法&#xff09;&#xff0c;每个知识点选择了…

软测培训机构哪个比较好

软件测试这个岗位是软件开发过程中非常重要的一步&#xff0c;一个软件的开发是少不了软测工程师的&#xff0c;近几年&#xff0c;软测的发展前景越来越可观&#xff0c;很多人都想学习软测技术&#xff0c;那么市面上软测培训机构哪个比较好呢?来看看下面的详细介绍。 软测培…