---
# System prepended metadata

title: C# Class 6  0729
tags: [C#]

---

###### tags: `C#`
# C# Class 6  0729

:rocket: :rocket: :rocket: 


## :memo: CH5. 方法與參數

### 5-1: 認識方法

### 5-2: 認識參數

### 5-3: 認識同名方法
同名函式(overload)的參數需定義為不同
可能會導致偵錯困難，應盡量避免模糊不清的參數定義
ex:![](https://i.imgur.com/rmSHyYu.png)
優點:擴充性較佳
ex:

![](https://i.imgur.com/pnOOjLX.png)

新函式在定義時僅需多加一個參數即可，功能上線時也可兼容舊函式

缺點:維護性較差(偵錯困難，修改預設值不方便)

---

## :memo: CH6. 陣列與集合

有陣列 or集合即可跑迴圈，程式會比較好寫
陣列的變數要當作參考型態看待，建陣列時需要new(簡寫可不用new)
$\Uparrow$     $\Uparrow$    $\Uparrow$    $\Uparrow$    $\Uparrow$    $\Uparrow$
```
建好的陣列是一個物件，無法直接透過Console.Writeline印出。
要使用override或是迴圈將陣列印出
```


### 6-1: 認識陣列
建立時是固定大小，可手動調整大小
型態相同的資料集合
不適合插入&刪除


### 6-2: 建立陣列
二維陣列ex:float[,]=new float[12,31]$\Rightarrow$中間有逗點
存取陣列維度的上下限會引發IndexOutOfRange的例外(跑迴圈特別容易出現)
查詢陣列元素數目:使用length屬性
查詢陣列維度數目:使用GetLength方法
![](https://i.imgur.com/ZaOejKr.png)

### 6-3: 使用陣列
調大小:使用resize(ref陣列，大小)
IndexOf，LastIndexOf為線性(循序)搜尋，效率不好。適合陣列元素不多的場合
搜尋:
1.循序搜尋
2.二分搜尋
BianarySearch:***搜尋前須先排序***
Array.Sort會喪失原有陣列的順序
Lambda或LINQ敘述可保留原有順序

### 6-4: 傳統集合，泛型(Generic)集合，與Thread-Safe
自動調整大小
適合插入&刪除
Boxing:將值型態轉換為參考型態
傳統集合(第一代)
泛型(第二代)=><型態>不需轉型，不會產生Boxing//
搜尋最快的方法==Dictionary=>元素型態:Key-Value Pair

執行緒安全Thread-Safe(第三代)=><型態>不需轉型，不會產生Boxing

### 6-5: 認識集合

### 6-6: 使用集合

![](https://i.imgur.com/4etfJ5c.png)


---

> However, if you have a “need for speed” or are doing a heavy amount of query lookups, then if you need to search for a collection for a string:
> **In the “key”, A Dictionary, ConcurrentDictionary, or Hashset are your best bets.**
> 
> **In the “value”, you should use a SortedList, or convert to an array/normal List and do a binary search.**
> 
> By all means, do not use LINQ. The performance difference can be summed up as follows: LINQ is like trying to melt butter with a match; whereas the top performers are akin to melting butter with a blowtorch.


:rocket: :rocket: :rocket: 