项目心得(代码篇)

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

转载于:https://www.cnblogs.com/chenzz/archive/2007/11/19/964919.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值