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