• C#几个经常犯错误汇总


    在我们平常编程中,时间久了有时候会形成一种习惯性的思维方式,形成固有的编程风格,但是有些地方是需要斟酌的,即使是一个很小的错误也可能会导致昂贵的代价,要学会善于总结,从错误中汲取教训,尽量不再犯同样错误,注重编程之美,代码的优雅,总结几个平常经常犯的错误。

    1、在C#编程中,字符型类型是最容易处理出错的地方,代价是非常昂贵,在.Net Framwork中,字符串是一个相当特别的引用类型,string本省就是一个不可继承的密封类,但是它具有了值类型所应用的特点,但是它在CLR中内存还是保存于托管堆之上,也就是说,当我们每次定义一个字符串类型的时候,就在堆内存中开辟一端内存,而当我们字符串被修改之后,它会创建一个新的内存,注意这里的内存是不连续的,而是通过修改栈内地址引用而拼凑字符串,不会改变源字符串在内存中的地址,所以有些程序员总是喜欢使用这样的方法格式化字符串:

    string  SelectText="select * from "+TableName+" where UserName='"+Name+"'";

    上述代码,使用了字符串拼凑的方法,因为使用了多重串联,因此会在内存中创建两个不必要的字符串垃圾副本。

    string SelectText=string.Format("select  *  from {0} where UserName={1}",TableName,Name);

    2、大多数开发人员都不知道内置的验证数据类型的方法,如System.Int32,因此很多人都是自己实现的,其实这是不妥的,因为这些基本类型中都存在自己固有的类型验证方法,下面这个就是自己实现验证的一个字符串是否是数值的代码:

    public bool CheckIfNumeric(string value)
    {
    bool IsNumeric=true;
    try
    {
    int i=Convert.ToInt32(value);
    }
    catch(FormatException excepiton)
    {
    IsNumeric=false;
    }
    return IsNumeric;
    }

    虽然使用了try catch语句,这不是最佳的做法,更好的方法是下面使用Int.TryParse;

    int output=0;
    bool IsNumeric=int.TryParse(value,out output);

    int.TryParse是更快、更简洁的方法。

    3、学会合理的管理公共变量,我们在系统中经常会滥用公共变量,没有做到合适的封装好。

    View Code
     1 static  void Main(string[]  args)
    2 {
    3 MyAccount account=new MyAccount();
    4 //这地方不能随便的调用account里面的字段进行更改,但是缺改了
    5 account.AccountNumber="ddddddddd";
    6 Console.ReadKey();
    7 }
    8 public class MyAccount
    9 {
    10 public string AccountNumber;
    11 public MyAcctount()
    12 {
    13 AccountNumber="ssssssssssssss";
    14 }
    15 }

    在上面的MyAccount类中生命了一个AccountNumber公共变量,理想情况下,AccountNumber应该是只读的,不能让外界修改,但是这里MyAccount类却没有对它做任何控制。

    声明公共做法应该是使用属性,如:

    View Code
     1 public  class  MyAccount
    2 {
    3 private stirng _accountNumber;
    4 public string AccountNumber
    5 {
    6 get { return _accountNumber; }
    7 }
    8 public MyAccount()
    9 {
    10 _accountNumber="dddddddd";
    11 }
    12 }

    这里我们封装了AccountNumber公共变量,它变成了只读,不能由调用者类进行修改。

  • 相关阅读:
    asp.net mvc @RenderBody()的问题
    (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
    Spring配置错误 No adapter for IAdvice of type
    java之路 super
    java之路 static
    java之路 构造代码块注意事项
    java之路 面向对象基础
    Node.js系列02
    Node.js 系列01
    王垠:《程序员的心理疾病》
  • 原文地址:https://www.cnblogs.com/lihuijun/p/2423480.html
Copyright © 2020-2023  润新知