# 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: ?