---
# System prepended metadata

title: 6/7學習進度
tags: [List, I/O, Grid]

---

# 6/7學習進度
###### tags: `I/O` `List` `Grid`

## 型別轉換
#### string to int :
```cpp=
//方法一
Int32.Parse("2");  //2

//方法二
Convert.ToInt32("2");  //2

//檢測是否能轉換，回傳 <boolean>
int a;
var k = Int32.TryParse("3", out a); //k = TRUE, a = 3
```

#### 比較表 : [參考](http://www.cnblogs.com/flyker/archive/2009/03/04/1402673.html)


| | `Int32.Parse()` | `Convert.ToInt32()` |`(int)`|
| -------- | -------- | -------- |--|
| **input type** | string     | Object, string, double...(很強大) |double, float|
|**傳入 `NULL`**|Error|回傳 `0`|Error|
|**傳入浮點數**|Error|四捨五入|無條件捨去


## 讀寫檔案
從檔案一行一行讀的時候，`\n` 也會被吃進來，所以要先把它換掉:
```cpp
mystring = mystring.Replace(System.Environment.NewLine, String.Empty);
```

### 讀
[參考](https://docs.microsoft.com/zh-tw/dotnet/csharp/programming-guide/file-system/how-to-read-from-a-text-file)
```cpp=
//把所有的內容一次讀進一個陣列
string[] lines = System.IO.File.ReadAllLines(@"filePath");

//全部讀成一行
string text = System.IO.File.ReadAllText(@"filePath");

```

### 寫
[參考](https://docs.microsoft.com/zh-tw/dotnet/csharp/programming-guide/file-system/how-to-write-to-a-text-file)
```cpp
//逐行讀進去
using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"filePath", true)){
    file.WriteLine("要寫進去的內容");
}
```

## List
用法整理>>[連結](https://msdn.microsoft.com/zh-tw/library/6sh2ey19(v=vs.110).aspx)

```cpp=
/*懶人包*/
//宣告一個不限長度的陣列
List<int> myIntLists = new List<int>();

//資料放在陣列的尾端
myIntLists.Add(123456);

//回傳List的長度 <int>
myIntLists.Count

//把裡面的資料清光光
myIntLists.Clear()
```
##### 小發現~~
```cpp=
//錯誤寫法 >m<
List<int> test = new List<int>(3);
test[0] = 4;    //runtime Error!! (和c++的vector不一樣QQ)

//正確版
List<int> test = new List<int>(3);
test.add(4);    //test[0] = 4;
```


## Class
[參考](https://docs.microsoft.com/zh-tw/dotnet/csharp/programming-guide/classes-and-structs/classes)
```cpp=
/* 完整版 */
public class Person
{
    public Person()
    {
        Name = "unknown";
    }
    // 適用於這樣宣告
    // Person w = new Person();

    public Person(string name)
    {
        Name = name;
    }
    // 適用於這樣宣告
    // Person w = new Person("wendee");

    public string Name { get; }
    // 適用於這樣宣告
    // Person w = new Person();
    // w.Name = "wendee";

    public override string ToString()
    {
        return Name.ToString();
    }
    // 應用於呼叫class的時後
    // Console.WriteLine(w);
    // Output: "wendee" 
}
```

```cpp=
/* 精簡版 */
public class Person
{
    public Person(string name) => Name = name;
    public string Name { get; }
    public override string ToString() => Name;
}
```

## XAML
XAML 是一種宣告式的標記語言。當套用至`.NET Framework ` 程式設計模型，可簡化 XAML 建立`UI.NET Framework ` 應用程式。
* style 傾向全部寫在一起 
```htmlmixed
<TextBlock x:Name="p3" HorizontalAlignment="Right" Margin="10,0"/>
```
* `C#`在呼叫或修改單一元件的屬性時，可以直接用 `Name` 
```htmlmixed
p3.Text = "xyz"
```
> `Name` 感覺像 `id`，可是就沒辦法透過它來處理多個物件(?[name=遠志]

### Event (以button為例)
```cpp
private void MethodName(object sender, RoutedEventArgs e)
```
The `sender` parameter is typed as the base `Object` type. A common technique is to **cast sender** to a more precise type.

```javascript
var b = sender as Button;
int tag = Convert.ToInt32(b.Tag);
```

`RoutedEventArgs` is event data, which generally appears in syntax definitions as the `e` parameter. 

### Grid
```htmlmixed=
<!-- 會先定義好才開始使用 -->
<Grid.RowDefinitions>
    <RowDefinition Height="Auto"/>
    <RowDefinition Height="*"/>
    <RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
    <ColumnDefinition Width="*"/>
    <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>

<!-- 開始指定下列元件要放在哪個欄列 -->
<TextBox Grid.Row="0" Height="100px"  Grid.ColumnSpan="3"/>
<Rectangle Grid.Row="2" Grid.Column="1" Fill="BlanchedAlmond"/>

<TextBlock Grid.Row="1" Grid.Column="0">1</TextBlock>
<TextBlock Grid.Row="1" Grid.Column="1">2</TextBlock>
```
>`Height` 的屬性中，`Auto` 只會把大小設成剛好放得下的高度， `*` 就像css裡的 `flex` (等分畫面)

### ListView
在 `xaml` 的宣告:
```htmlmixed
<ListView x:Name="finalList" Height="100px"></ListView>
```
在 `C#` 的使用:
```cpp
//加東西進去
finalList.Items.Add("xyz");

//清空
finalList.Items.Clear();
```

## 下次目標

- [ ] 看懂 `{binding}`
- [ ] 研究怎麼一次控制多個物件 >> [stackOverflow](https://stackoverflow.com/questions/17990735/looping-through-stackpanel-children-in-wpf?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa)
- [ ] [button](https://docs.microsoft.com/en-us/uwp/api/Windows.UI.Xaml.Controls.Primitives.ButtonBase#Windows_UI_Xaml_Controls_Primitives_ButtonBase_Click)

## 回饋
* String和 string 在C# 裡是一樣的
* 每個平台的 Int 儲存長度可能會不一樣(小心range不一樣會overflow)
* Cpu會影響byte大小
* Decimal存的長度好大
* 有空多查查api document
* 每個平台的換行符號也不一樣喔>< `\n\r`、`\n`

#### 回家試試看:
- [ ] Enum都不設數字?
- [x] Class copy方式? (B=A 只是指向同一個地方喔
- [x] Int array / Listview / Template/ Lamba expreesion 是什麼?
> [Lampda Expression](https://docs.microsoft.com/zh-tw/dotnet/csharp/programming-guide/statements-expressions-operators/lambda-expressions)
> [name=徐遠志][time=Mon, Jun 18, 2018 10:29 AM][color=#4c0c]
- [x] 如何實現Data binging?
- [ ] 什麼是X: ? 
