![]() |
|
Spaces home CSST Development LogProfileFriendsBlogMore ![]() | ![]() |
CSST Development Log |
|||||
|
December 12 简单Blog程序(附源码)程序使用VS2008开发,框架使用.Net 2.0,是在别人的Blog的基础上修改而来的,主要原因在使用原BLOG程序时发布网站后无法使用,后来自已在其原来的基础上换了编缉器为FckEditor,先上几张图 November 18 项目心得(代码篇)1. 如果一个字符串是由多个字符串拼接(如"hello"+"world")而成,建议使用string.Format函数实现同样功能,这样不仅可读性高,而且效率也高(特别是在组合SQL语句时,使用此方法更有利于SQL的阅读),比如下列代码: string msg = "\r\n---------Log Time:" + System.DateTime.Now.ToString() + "--------\r\n" + text; 换成 string msg = string.Format("\r\n---------Log Time:{0}--------\r\n{1}", System.DateTime.Now.ToString(), text);
string xx = string.Format("Select * From Test Where Id={0}", 1);
好一点 关于此用法,我们还可以在StringBuilder变量中用得到,比如以下语句: System.Text.StringBuilder sb = new System.Text.StringBuilder(); sb.AppendFormat("Exception is {0}", ex.ToString());
2. 枚举变量的声明,声明变量之后可加冒号,也可不加,如果枚举变量类型不多,可以指定成员变量类型为byte,可以节省存储空间(不过这个意义一般,不是很大) public enum OperateType : byte { Add, Modify, Delete, Unknown }; 3. 错误日志记录,为了防止在程序运行期间抛出未在程序中处理的错误,可在程序入口处(即main函数体中)加入以下代码来记录具体出错日志 //-----------处理应用程序中未捕获的错误,记录到日志------------- Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); //-------------------------------------------------------------
private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) { string errMsg = string.Format("Application.ThreadException Occurs:\r\n{0}", e.Exception.ToString()); Utility.LogMsg.WriteLogToApplicationFolderByMonth(errMsg); //throw new NotImplementedException(); } 这样可以把运行期间未在程序中处理的错误全部记录下来,以备调试可用
4.单件模式的使用,很多时候我们需要限定类只有一个实例,这时我们可以考虑使用单件模式来实限此功能,比如我们在一般应用程序中,必须要限定某个窗体只能打开一个,不允许有多个实例,可以使用下面方法
private static MDIMainForm _instance;
public static MDIMainForm Instance() { if (_instance == null) { _instance = new MDIMainForm(); } return _instance; } 然后把构造函数定义为私有的,不允许直接调用构造函数直接实例化,如下所示 private MDIMainForm() { InitializeComponent(); }
4. 递归算法,项目中有一个无限分类的树,需要穷举出树的所有结点,因为不能确定树的层数(也不允许限定层数,因为可以是N层),想了很多方法都不行,最后才想到使用递归,实现起来容易多了,当然我们可以根据这个算法解决很多类似问题,解决方案可参考 #region 无限分类实现(使用递归方法实现) private void BindToTreeView(int partentID, TreeNode node) { string loadedItem = string.Empty; //已加载条目
DataRow[] drs = dtClass.Select("ParentID=" + partentID); foreach (DataRow dr in drs) { string rowTag = dr["Class_ID"].ToString().Trim(); if (loadedItem.Contains(rowTag)) continue;
loadedItem += rowTag;
string nodeItemName = dr["Name"].ToString().Trim(); TreeNode subNode = new TreeNode(nodeItemName);
subNode.Tag = dr["Class_ID"].ToString().Trim(); subNode.ToolTipText = dr["Description"].ToString().Trim();
if (node == null) { this.treeViewClass.Nodes.Add(subNode); } else { node.Nodes.Add(subNode); }
if (dtClass.Select("ParentID=" + dr["Class_ID"].ToString()).Length > 0) { BindToTreeView(int.Parse(dr["Class_ID"].ToString()), subNode); } } } #endregion
感谢访问!
|
||||
|
|