給 c 程式設計師的十個重要提示

2021-10-22 20:46:39 字數 3836 閱讀 3868

本文講述我認為對 c# 程式設計師最重要的 10 個提示, 每個提示都會有一段對應的**, 對 新手來說也很容易掌握。

1: 為非公開的方法編寫測試

你嘗試過為元件的非公開方法寫測試麼? 很多開發者都沒有寫過, 因為這些方法對測試項 目來說是不可見的。 c# 可以通過在 assemblyinfo.cs 中新增下面的標記 (internalsvisibletoattribute) , 讓內部成員對其它元件可見。

//make the internals visible to the test assembly

[assembly:

internalsvisibleto

("mytestassembly"

)]

2: 使用 tuples 型別

曾經見到過有人僅僅因為函c#教程數要返回多個值而建立了乙個 poco 類, 其實 .net 4.0 中的 tuples 型別會更加適用, 例如:

public tuple<

int,

string

,string

>

getemployee()

3: 用 yield 替代臨時集合

從集合中選出部分成員時, 通常會建立乙個臨時集合/列表來儲存成員並返回, 例如下面 的**:

public list<

int>

getvaluesgreaterthan100

(list<

int> mastercollection)

}return tempresult;

}

要避免這樣的臨時集合, 可以使用 yield 關鍵字, 示例如下:

public ienumerable<

int>

getvaluesgreaterthan100

(list<

int> mastercollection)

}}

當然, 也可是使用 linq 來解決上面的問題。

4: 告訴別人你將替換乙個方法

當你有乙個元件時, 並且你打算替換其中的乙個方法時, 可以先為方法新增過時標記以通 知客戶端, 示例**如下:

[

obsolete

("this method will be deprecated soon. you could use xyz alternatively.")]

public

void

mycomponentlegacymethod()

使用這個方法客戶端在編譯時會發出乙個警告, 如果你不再允許客戶端使用過時的方法時, 可以為過時標記新增乙個額外的布林引數, 在下面的例子中, 客戶但程式將編譯失敗:

[

obsolete

("this method is deprecated. you could use xyz alternatively."

,true)]

public

void

mycomponentlegacymethod()

5: 牢記 linq 查詢是延遲執行的

在 .net 中編寫 linq 查詢時, 只有當你訪問 linq 查詢的結果時, linq 查詢才會被執 行, linq 的這種特徵被稱為延遲執行, 不過值得注意的是每訪問一次結果, linq 查詢 都會被執行一次。

為了避免重複 linq 查詢的重複執行, 可以先將查詢轉換成列表, 如下所示:

public

void

mycomponentlegacymethod

(list<

int> mastercollection)

6: 使用 explicit 關鍵字轉換業務實體型別

使用 explicit 關鍵字來定義業務實體型別之間的轉換, 當****現型別轉換請求時, 轉換方法會自動執行, 下面是示例**:

class

program

;var convertedentity =

(myentity)entity;}}

class

myentity

public

string fullname

public

static

explicit

operator

myentity

(externalentity externalentity);}

}class

externalentity

public

string firstname

public

string lastname

}

7: 保持異常的原始堆疊跟蹤

在 c# **中, 如果你像下面的**一樣在 catch **塊中丟擲 connectdatabase 方法**現的異常, 異常的堆疊就會只顯示到 rundataoperation 方法, 這樣就會丟失 異常原始的堆疊跟蹤資訊導致不能找到確切的錯誤源頭。

public

void

rundataoperation()

catch

(exception exception)

}

保持原始堆疊跟蹤的**如下:

public

void

rundataoperation()

catch

(exception

)}

8: 使用 flags 標記將列舉作為位域處理

在 c# 中為列舉型別新增 flags 標記可以將列舉作為位域(即一組標誌)處理, 這樣可 以對列舉值進行自由組合, 示例**如下:

class

program}[

flags

]enum reptile

上面**的輸出為 「blackmamba, cottonmouth, wiper」 , 如果沒有 flags 標記, 則上 面的輸出為 14 。

9: 為泛型新增型別約束

建立泛型型別時, 需要指定提供的泛型型別必須實現指定的引數或者繼承自特定的基類時, 可以這樣做:

class

mygenricclass

where t : imyinte***ce

當然, 也可以在方法級別這樣做:

class

mygenricclass

}

10: ienumerable 型別不能確保唯讀

在你建立的型別中, 暴露了乙個型別為 ienumerable 的唯讀屬性, 但是呼叫者依然可 以通過型別轉換來修改屬性的內容, 比如這樣:

class

program

}class

myclass

public ienumerable<

string

> readonlynamecollection

}public

void

print()

}}上面的**修改了列表, 新增了乙個新專案, 要避免這種情況, 應使用 asreadonly 而不是 asenumerable :12

3public ienumerable<

string

> readonlynamecollection

}

以上就是給 c# 程式設計師的十個重要提示的詳細內容

程式設計師的十個級別

第一級 神人,天資過人而又是技術狂熱者同時還擁有過人的商業頭腦,遠矚,技術過人,大器也。如丁磊,求伯君。第二級 高人,有天賦,技術過人但沒有過人的商業頭腦,通常此類人不是頂尖黑客 就是技術總監 之流。第 牛人,技術精湛,熟悉行業知識,敢於創新,有自己的公司和軟體產品。第四級 工頭,技術精湛,有領導團...

程式設計師的十個點

你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下markdown的基本語法知識。全新的介面設計,將會帶來全新的寫作體驗 在創作中心設定你喜愛的 高亮樣式,markdown將 片顯示選擇的高亮樣式進行展示 全新的ka...

十個糟糕的程式設計師的行為

1 情緒化的思維 如果你開始使用不同顏色的眼光來看待這個世界的話,那麼你可能會成為乙個很糟糕的程式設計師。情緒化的思維或態度很有可能會把自己變成乙個怪物。相信你經常可以看到很多很糟糕的程式會使用下面的這些語句 這些帶著情緒化的思維和態度,不但可以讓你成為乙個很糟糕的程式設計師,甚至可以影響你的前途。...