亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#新手常犯的錯誤匯總

2020-01-24 02:29:01
字體:
來源:轉載
供稿:網友

本文所述為C#新手常犯的錯誤,但是實際上很多有經驗的程序員也經常犯這些錯誤,對此特別整理了一下,供大家參考。具體如下:

1、遍歷List的錯誤,比如如下代碼:

List<String> strList =newList<String>for(int i =0; i<strList.Count; i++){  strList.RemoveAt(i);}

這段代碼看上去是刪除了所有元素,實際上每次調用RemoveAt方法會導致List元素索引重排,最后導致元素沒有完全刪除。
可以改成:

List<String> strList =newList<String>for(int i =0; i<strList.Count; i++){  strList.RemoveAt(i);  i-=1;}

這樣就可以完全刪除List中的元素。

2、關于C#常量的錯誤

比如你寫了一個類庫,在里面定義了如下常量:

public const String str="First Version";

并且在另一個程序里引用了這個類庫,如果你修改了這個類庫中的常量,發布了一個新的版本,那么再運行之前的程序,你會發現常量還是原來的常量,并沒有改變。這是因為C#在編譯的時候,常量直接作為元數據嵌入,解決方法是重新編譯整個解決方案或者使用屬性而不是直接訪問常量。

3、當把值類型裝箱后,如果拆箱只能拆成原來裝箱前的類型,比如:

Int32 a=3;Object obj=new object();//這里裝箱成功,不會失敗obj=i;//拆箱一定會失敗Int64 b=(Int64)obj;

可以像這樣操作:

Int64 b =(Int64)(Int32)obj;

就能完成轉型

4、重載==運算符的錯誤:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace UseOperator{  class Program  {    static void Main(string[] args)    {      Test t1 = new Test();      t1.MyFun();      Console.ReadLine();    }  }  class Test  {    public void MyFun()    {      Test t = new Test();      if (t == null)      {        Console.WriteLine("t為空!");      }      else      {        Console.WriteLine("t不為空!");      }    }    //存在BUG的重載運算法    public static bool operator ==(Test t1, Test t2)    {      return t2.Equals(t1);    }    public static bool operator !=(Test t1, Test t2)    {      return !(t1 == t2);    }     //覆蓋HashCode    public override int GetHashCode()    {      return base.GetHashCode();    }    public override bool Equals(object obj)    {      return base.Equals(obj);    }  }}

這里的問題在于MyFun中會把NULL傳遞進==運算符函數,導致運行的時候報錯,正確的做法是:

public static bool operator ==(Test t1, Test t2){  if ((t2 as object) == null)  {    return (t1 as object) == null;  }  else  {    return t2.Equals(t1);  }}

5、C#中調用結構的屬性或者方法必須用new來聲明結構變量,否則會出錯。

6、如果使用了params使用多個參數,必須判斷參數是否為空,否則程序會有隱藏的BUG。

7、靜態成員在創建第一個實例的時候就會初始化,而且只被初始化一次,不要亂用靜態成員。

8、如果使用ref Object類型參數接受String類型會出錯,這是因為C#要求參數必須使用正確的類型,不加ref是可以的,如果一定要使用ref Object接受String類型參數,可以先轉型成Object,再引用傳遞。

9、類的構造函數中永遠不要調用虛方法,比如:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace FransferVirtualFunction{  class Program  {    static void Main(string[] args)    {      try      {        Child ch = new Child();      }      catch (Exception ex)      {        Console.WriteLine(ex.Message);      }      Console.Read();    }  }  public class Ref  {    public string Str = "這是Ref類的一個成員";  }  public class Parent  {    protected Ref my;    public Parent()    {      my = new Ref();      //構造方法中調用了虛方法      Console.WriteLine(GetString());    }    //虛方法    public virtual string GetString()    {      return my.Str;    //使用了內部成員    }  }  public class Child : Parent  {    private Ref my2;    public Child()      : base()    {      my2 = new Ref();    }    //重寫虛方法    public override string GetString()    {      return my2.Str;    //使用了內部成員    }  }}

這里在執行基類的構造函數的時候會執行到派生類的虛方法GetString(),在獲取my2.Str的時候拋出異常,因為此時派生類對象還沒有被構造。

10、在C#和SQL Server通信時要注意NULL的含義,在SQL Server里面這個值代表1900-1-1。SQL Server的空值可以使用DBNull來表示。

暫時就是這么多了,注意到以上10點可以在編程的時候減少大量BUG。

補充:

1、Math 三角函數 其中的參數為 弧度值,而非角度值。

2、WinForm 中的由相對路徑引發的bug:具體可以參考WinForm相對路徑的陷阱

3、使用 xml, json 等序列化后的數據格式傳遞數據時,如果傳遞的數據為數值型類型,解析時,最好先將其轉為string 然后 tryParse 成相應類型。

至于原因:如上的第三點、是裝箱和拆箱的問題。

相信本文所述對大家C#程序設計可以帶來很大的幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人午夜黄色影院| 欧美亚洲国产另类| 欧美激情喷水视频| 最近2019年中文视频免费在线观看| 日韩电影大片中文字幕| 精品亚洲精品福利线在观看| 欧美激情啊啊啊| 97精品视频在线播放| 亚洲女人被黑人巨大进入| 国产成人亚洲综合青青| 亚洲韩国日本中文字幕| 九九久久精品一区| 精品国产成人在线| 亚洲色图18p| 深夜精品寂寞黄网站在线观看| 九九热这里只有在线精品视| 亚洲a在线播放| 伊人一区二区三区久久精品| 亚洲精品xxx| 久久影院模特热| 国产午夜精品久久久| 欧美一级免费视频| 日韩在线观看免费网站| 国产精品久久久久99| 精品久久久在线观看| 国产视频综合在线| 中文字幕日韩免费视频| 17婷婷久久www| 国产精品自在线| 国产精品xxxxx| 国产色视频一区| 欧美黄色小视频| 国产精品大片wwwwww| 国产91成人在在线播放| 日韩大胆人体377p| 欧美日韩国产成人在线观看| 亚洲综合av影视| 亚洲视频电影图片偷拍一区| 中日韩美女免费视频网址在线观看| 欧美黑人狂野猛交老妇| 亚洲国产成人久久| 国产日本欧美一区二区三区| 91禁国产网站| 国产精品亚洲自拍| 国产精品永久在线| 日韩av免费在线观看| 国产一区二区动漫| 一区二区亚洲欧洲国产日韩| 91精品国产一区| 自拍偷拍亚洲精品| 国自在线精品视频| 日韩精品视频观看| 97视频国产在线| 国模叶桐国产精品一区| 欧美激情高清视频| 亚洲有声小说3d| 久久亚洲综合国产精品99麻豆精品福利| 亚洲精品天天看| 美女扒开尿口让男人操亚洲视频网站| 亚洲色图日韩av| 日韩中文视频免费在线观看| 裸体女人亚洲精品一区| 5566日本婷婷色中文字幕97| 精品国产欧美成人夜夜嗨| 久久久久久久999精品视频| 97在线观看免费高清| 日韩精品极品在线观看| 日韩欧美在线免费| 欧美成人手机在线| 97成人超碰免| 亚洲一二三在线| 国产精品丝袜高跟| 97精品伊人久久久大香线蕉| 欧美成人精品xxx| 在线视频欧美性高潮| 九九热最新视频//这里只有精品| 国产成+人+综合+亚洲欧洲| 亚洲第一色在线| 国产91露脸中文字幕在线| 久久精品视频在线观看| 欧美成人手机在线| 国产精品色婷婷视频| 欧美在线视频网站| 久久全球大尺度高清视频| 久久久久久久激情视频| 亚洲肉体裸体xxxx137| 亚洲精品在线91| 亚洲三级 欧美三级| 国产mv免费观看入口亚洲| 久久福利网址导航| 九九热这里只有精品免费看| 欧美夫妻性视频| 综合136福利视频在线| 在线日韩第一页| 久久99国产综合精品女同| 精品中文字幕在线2019| 国产精品久久久| 中文字幕亚洲天堂| 国产精品久久综合av爱欲tv| 国产一区香蕉久久| 九九精品视频在线| 久久99久久亚洲国产| 国产精品专区一| 国产精品吊钟奶在线| 亚洲国产精品福利| 91色p视频在线| 亚洲免费av电影| 亚洲人成网站免费播放| 亚洲欧洲国产一区| 91极品视频在线| 日韩高清电影免费观看完整| 欧美精品福利视频| 亚洲激情电影中文字幕| 亚洲欧美在线第一页| 久久99热精品这里久久精品| 欧美日韩国产色视频| 日本一区二三区好的精华液| 亚洲女性裸体视频| 亚洲成人久久久久| www.亚洲天堂| 欧美又大粗又爽又黄大片视频| 亚洲精品久久久久久久久久久久| 成人免费自拍视频| 国产成人精品免费久久久久| 精品国产老师黑色丝袜高跟鞋| 国产精品久久久av| 久久久这里只有精品视频| 日韩精品视频观看| 欧美在线视频网| 亚洲精品有码在线| 久久久久久高潮国产精品视| 国产精品美女久久久久久免费| 日韩av毛片网| 韩剧1988免费观看全集| 2018中文字幕一区二区三区| 成人在线免费观看视视频| 中国日韩欧美久久久久久久久| 91精品美女在线| 正在播放欧美视频| 亚洲成人精品视频| 97在线视频免费| 欧美激情中文字幕在线| 国产99久久久欧美黑人| 热99精品只有里视频精品| 91久久久久久久久久| 91系列在线观看| 欧美网站在线观看| 欧美人在线观看| 欧美成人激情视频免费观看| 久久最新资源网| 亚洲日本成人网| 1769国内精品视频在线播放| 美女精品视频一区| 欧美香蕉大胸在线视频观看| 91夜夜未满十八勿入爽爽影院| 久久精品国产电影| 国产丝袜一区二区| 欧美有码在线观看| 久久久精品视频在线观看| 欧美大片大片在线播放| 久久精品99久久香蕉国产色戒| 日本精品视频在线播放| y97精品国产97久久久久久| 久久久久久久久久久免费精品|