zoukankan      html  css  js  c++  java
  • C#开发代码的小技巧2

    18.使用属性代替可访问的数据成员
    19.运行时常量(readonly)优于编译时常量(const)
    20.操作符is或as优于强制转型
    21.使用Conditional特性代替#if条件编译
    22.总是提供ToString()方法
    23.明辨值类型和引用类型的使用场合
    24.将值类型尽可能实现为具有常量性和原子性的类型
    25.确保0为值类型的有效状态
    26.理解几个相等判断之间的关系
    27.理解GetHashCode()方法的缺陷
    28.优先采用foreach循环语句
    29.变量初始化器优于赋值语句
    30.使用静态构造器初始化静态类成员
    31.利用构造器链
    32.利用using和try/finally语句来清理资源
    33.尽量减少内存垃圾
    34.尽量减少装箱与拆箱
    35.实现标准Dispose模式
    36.定义并实现接口优于继承类型
    37.明辨接口实现和虚方法重写
    38.使用委托表达回调
    39.使用事件定义外发接口
    40.避免返回内部类对象的引用
    41.声明式编程优于命令式编程
    42.尽可能将类型实现为可序列化的类型
    43.使用IComparable和IComparer接口实现排序关系
    44.避免ICloneable接口
    45.避免强制转换操作符
    46.只有当新版基类导致问题时才考虑使用new修饰符
    47.尽可能实现CLS兼容的程序集
    48.尽可能实现短小简洁的函数
    49.尽可能实现小尺寸、高内聚的程序集
    50.限制类型的可见性
    51.创建大粒度的Web API
    52.重写优于事件处理器
    53.合理使用.NET运行时诊断
    54.使用标准配置机制
    55.定制和支持数据绑定
    56.使用.NET验证
    57.根据需要选用恰当的集合
    58.DataSet优于自定义结构
    59.利用特性简化反射
    60.避免过度使用反射
    61.为应用程序创建特定的异常类
    62.优先选择强异常安全保证
    63.最小化互操作
    64.优先选择安全代码
    65.掌握相关工具与资源
    66.为C# 2.0做准备
    67.了解ECMA标准

    68.使用数据库时,存储过程参数,尽量不要拼接字符串。
    数据库要建立索引、使用事务。
    ASP.NET合理利用母版页和缓存。
    提取字符串注意正则表达式的优化,提高准确性来减少迭代。
    算术表达式要多用小括号。
    private bool test = false;if(test){;}
    结构简单时使用三目运算符。
    灵活使用switch。

    尽量使用托管代码。

    如果托管代码用到了非托管资源,最好使用Dispose模式,并且一定要手写代码清理非托管资源

    使用非托管代码写保密性的算法或很有价值的算法。
    平时写的代码要OOP,然后封装成自己的类库,提高日后开发效率。
    多用组合,少用继承。
    字符串合理使用Trim()。
    实现文件复制时,尽量减少对磁盘读写次数。

    69.模拟延时代码:System.Threading.Thread.Sleep(2000);

    70.用""的地方改成String.Empty.判断字符串为空,用.Length<=0

    71.// 使用as
    object o = GetFromCache("KEY");
    EmployeeInfo employee
    = o as EmployeeInfo; // 直接试图去转换,如果不成功,返回null,永远不会抛出异常
    if(employee != null) {
    // 有用的代码
    }

    // 使用is(is被调用了2次,类型判断被执行了2次)
    object o = GetFromCache("KEY");
    if(o is EmployeeInfo) { // 这个判断是需要时间的
    EmployeeInfo employee = o as EmployeeInfo; // 转换,注意,该方法会再次调用is进行类型判断
    // 有用的代码
    }
    72.用string.IsNullOrEmpty("")判断字符串是否为空

    73.如果可能尽量使用接口来编程(注:这样可以提高代码稳定性!)

    private void LoadList (object [] items, ListBox l)
    {
    for (int i = 0; i < items.Length;i++)
    l.Items.Add (items[i].ToString ());
    }
    74.使用属性代替原始数据(注:代码会更灵活,利于封装!)

    private int TheMonth = 0;
    [XmlAttribute (
    "Month")]
    public int Month
    {
    get {
    return TheMonth;
    }
    set {
    TheMonth
    = value;
    }
    }

    75.在Producer/Consumer 的Idiom中使用Delegate(注:这样做的好处是可以降低耦合!)

    public class KeyboardProcessor
    {
    private OnGetLine theFunc = null;
    public OnGetLine OnGetLineCallback {
    get {
    return theFunc;
    }
    set {
    theFunc
    = value;
    }
    }
    public void Run (){
    // Read input.
    // If there is any listeners, publish:
    string s;
    do {
    s
    = Console.ReadLine ();
    if (s.Length == 0)
    break;
    if (theFunc != null){
    System.Delegate [] funcs
    =theFunc.GetInvocationList();
    foreach (OnGetLine f in funcs) {
    try {
    f (s);
    }
    catch (Exception e) {
    Console.WriteLine
    (
    "Caught Exception: {0}", e.Message);
    }
    }
    }
    }
    while (true);
    }
    76.
    注意初始化顺序

    77.使用resharper,尤其是使用其中的Refactory,来修改名称,做参数调整。。。等重构动作

    78.把常用的代码段拉入左边的代码片段,下次使用的时候,直接将代码片段拖入即可。

    79.//不用临时变量交换两个int变量的值
    int a=1;
    int b=2;
    a
    =b+(b=a)*0;

    80.try和catch块写在循环体的外面:

    // 使用下面的写法
    try {
    for(int i=0; i<100; i++) {}
    }
    catch(Exception) {

    }
    // 不要使用下面的写法
    for(int i=0; i<100; i++) {
    try{}catch{}
    }
    81.对于小概率事件,不用每次都去判断是否发生。

    // 这个方法供程序员自己使用,所以极少发生被除数为0的情况
    // 所以采用下面的写法可提高性能
    internal double Divide(int op1, int op2) {
    try {return op1/op2;} catch(Exception){throw;}
    }

    // 相对上面的方法,下面的方法应该需要更长的时间
    internal double Divide(int op1, int op2) {
    if(op2 == 0) // 假设这个判断需要很长的时间
    throw new Excption("Divided by zero.");
    return op1/op2;
    }
    82.switch 嵌套FOR
    switch (k)
    {
    case 0:
    for (int l = 0; l < province.Rows.Count; l++)
    {
    if (!List省.Items.Contains(province.Rows[l]["省"].ToString()))
    List省.Items.Add(province.Rows[l]["省"]);
    }
    break;
    case 1:
    for (int l = 0; l < city.Rows.Count; l++)
    {
    if (!List市.Items.Contains(city.Rows[l]["市"].ToString()))
    List市.Items.Add(city.Rows[l]["市"]);
    }
    break;
    }

    83.int[] 和 string[] 互换
    int[] 转 string[]
    int[] arrInt = {100,101,102};
    string[] arrStr = Array.ConvertAll<int, string>(arrInt, delegate(int input) { return input.ToString(); });


    string[] 转 int[]
    string[] arrStr = {"100","101","102"};
    int[] arrInt = Array.ConvertAll<string, int>(arr, delegate(string s) { return int.Parse(s); });

    84.以固定的分隔符把字符数组生成新字符串
    string.Join(string separatorChar,string[] str);

    出处:http://blog.sina.com.cn/s/blog_6719966d0100i883.html

  • 相关阅读:
    ubuntu安装netcat
    护网工作
    ssrf绕过
    文件包含绕过
    thinkphp5.0.23
    xxe
    文件上传
    文件上传html xss
    获取网站title
    RobotFramework使用AutoItLibrary输入字符错误问题
  • 原文地址:https://www.cnblogs.com/movemoon/p/2756812.html
Copyright © 2011-2022 走看看