读改善c#代码157个建议:建议1~3

目录:

  • 建议一:正确操作字符串
  • 建议二:使用默认转型方法
  • 建议三:区别对待强制转型和as

 

建议一、正确操作字符串

1、确保尽量少的装箱

static void Main(string[] args)
        {
            int indexNo = 1;
            int dbNo = 4;

            string text = "I-" + indexNo + "D" + dbNo;

            Console.WriteLine("IndexNo:{0},DBNo:{1}", indexNo, dbNo);

            Console.ReadKey();
        }

 我们知道值类型转引用类型会产生装箱操作,装箱操作—为值类型在托管堆中分配内存以及类型对象指针和同步块索引的内存,将值类型拷贝到新分配的堆内存中,最后返回这个对象的地址。

反面:

 string text = "I-" + indexNo + "D" + dbNo;

 Console.WriteLine("IndexNo:{0},DBNo:{1}", indexNo, dbNo);

正面:

 string text = "I-" + indexNo.ToString() + "D" + dbNo.ToString();

  Console.WriteLine("IndexNo:{0},DBNo:{1}", indexNo.ToString(), dbNo.ToString());

 

2、避免分配额外的内存空间

String类型是特殊的引用类型,它一旦赋值就不可改变。我们所调用的"="或者"+"进行拼接都会创建一个新字符串。

反面:我们实际创建了4个string对象

string text = "I-" + indexNo.ToString() + "D" + dbNo.ToString();

正面:

使用:StringBuilder对象

StringBuilder strder = new StringBuilder();
            strder.Append("I-");
            strder.Append(indexNo.ToString());
            strder.Append("D-");
            strder.Append(dbNo.ToString());

            string text = strder.ToString();

根据 asdshit 的建议补充,这一点确实不知道,被忽略了:

StringBuilder()对象默认分配的空间是16字符。当空间满了之后,会再分配16个字符空间。

所以说如果我们可以正确估计我们的数据的字符总长度。正确的设定初始空间,这样,使得StringBuilder不必频繁地开辟分配空间。也避免大量的空间被浪费

使用:String.Format()方法

String.Format("I-{0}D-{1}", indexNo.ToString(), dbNo.ToString());

 

建议二、使用默认转型方法

1、类型转换运算符:强制转换

 int indexNo = 1;
           
 float f = (float)indexNo;

2、使用类型内置转换方法

Parse、TryParse 或者 ToString(),TodateTime

3、使用帮助类System.Convert提供的方法

 

建议三、区别对待强制转型与as和is

基类转型为子类本身使用as.

子类和子类之间的转型应该是提供转换操作符。

1、强制转型:

  • 两个类型之间通过支持强制转型操作符来完成两个类型之间的转型。
  • 两个类属于从属继承关系。

第一种情况:类型实现强制转换

class FirstType
{
        public string Name { get; set; }
    }

    class SecondType
    {
        public string Name { get; set; } 
        public explicit operator SecondType(FirstType firstType)
        {
            SecondType st = new SecondType() { Name = "转型自:" + firstType.Name };
            return st;
}

 

 FirstType ft = new FirstType();
            ft.Name = "First";

            SecondType st = (SecondType)ft;
            
            Console.WriteLine(st.Name);

 

第二种情况:继承关系:强制转换或者as 都行。

转载于:https://www.cnblogs.com/sunchong/p/4642084.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值