C# LINQ 查詢運算式 - 教學筆記 (使用visual studio)
LINQ 查詢運算式(Language-Integrated Query)是一種數據查詢語言,可以讓我們使用同一個語句來對不同資料來做資料查詢 (包括Objects、SQL、Datasets、Entities、Data Source、XML/XSD等),並且具有擴充性。
使用的方式很簡單 首先,要先載入System.Linq 命名空間類別庫就可以開始使用 LINQ 類別和介面
Continue ReadingMarketing, SEO, Web trends, Programming tutorial, Web design, and Life event...
LINQ 查詢運算式(Language-Integrated Query)是一種數據查詢語言,可以讓我們使用同一個語句來對不同資料來做資料查詢 (包括Objects、SQL、Datasets、Entities、Data Source、XML/XSD等),並且具有擴充性。
使用的方式很簡單 首先,要先載入System.Linq 命名空間類別庫就可以開始使用 LINQ 類別和介面
Continue ReadingC# 在系統集合泛型(System.Collections.Generic) 還包含 佇列(Queue)及堆疊(Stack)
這裡先簡單總結一下兩者的差異
佇列(Queue) 屬於先進先出(FIFO)的集合,例如: 一群人在排隊等公車,先來的就可以先上車。
堆疊(Stack) 屬於後進先出 (LIFO)的集合,例如: 將大箱子放入貨車櫃,最後放進去的,到時會最先取出來; 將子彈裝進彈匣,最後裝進去的會先擊發。
接下來,兩者說明如下:
Continue Reading前面,我們介紹過C#的泛型 可以讓我們自行設計泛型方法、類別來進行操作資料
在這裡,會說明C#預設提供的泛型集合類別(generic collection classes) 讓我們可以直接拿來使用於操作資料 這些類別主要都被包含在一個Class裡面,稱為系統集合泛型(System.Collections.Generic) 在這裡會介紹 List, Dictionary, Queue, Stack 集合類別
Continue ReadingC# 提供了泛型,讓我們可以用更有彈性的方式來設計Class、Method,操作資料
透過泛型類型 <型別參數T>來代表型別(int, string, double…)
可以在宣告時再指定型別,
以下透過範例來說明幾種情況的用法:
在Method使用泛型,只要在Method後面接上泛型類型 <型別參數T> 就可以在宣告時,再指定型別, 並且,可以搭配.GetType()來檢查型別 範例:
static void MyDemo<T>(T x)
{
Console.WriteLine("您傳入的型別為"+x.GetType()+ ",值=" + x);
}
static void Main(string[] args)
{
MyDemo<string>("Hello");//您傳入的型別為System.String,值=Hello
MyDemo<int>(3);//您傳入的型別為System.Int32,值=3
MyDemo<double>(3.14);//您傳入的型別為System.Double,值=3.14
}
在class使用泛型,一樣直接加上 <型別參數T> 即可 在這裡示範如何透過Class泛型來手動做一個簡易的list功能
範例:
// Declare the generic class.
public class MyListClass<T>
{
//初始化array,並參考泛型別
T[] innerArray = new T[0];
//Add Method - 新增一個array項目
public void Add(T item)
{
Array.Resize(ref innerArray, innerArray.Length + 1);
innerArray[innerArray.Length - 1] = item;
}
//Get Method - 取得array特定key的value
public T Get(int k) {
return innerArray[k];
}
//All Method - return array
public T[] All()
{
return innerArray;
}
}
static void Main(string[] args)
{
// Declare a list of type int.
MyListClass<int> listA = new MyListClass<int>();
listA.Add(3);
listA.Add(4);
listA.Add(5);
listA.Add(2);
foreach (int row in listA.All()) {
Console.WriteLine(row);
}
}
使用C# System.IO namespace,可以用在檔案建立、寫入、讀取…
在這裡,主要介紹 System.IO 的 File Class
透過WriteAllText可以將文字寫入檔案(如果檔案不存在,會自動建立),格式為:
File.WriteAllText(檔案位置及名稱, 字串);
範例:
string x = "Hello text";
File.WriteAllText("myfilename.txt", x);
使用ReadAllText可以直接讀取文件中的內容,格式為:
File.ReadAllText(檔案位置及名稱);
建立檔案 & 讀取檔案 範例:
//建立檔案
string x = "Hello text";
File.WriteAllText("myfilename.txt", x);
//讀取檔案
string y = File.ReadAllText("myfilename.txt");
Console.WriteLine(y);
C# 將字串插入文件內容尾端 範例:
File.AppendAllText("myfilename.txt", " append text to the end.");
string y = File.ReadAllText("myfilename.txt");
Console.WriteLine(y);
透過 Exists 可以判斷檔案是否已經存在 返回布林值
File.Exists(檔案位置及名稱);
範例
if (File.Exists("myfilename.txt")) {
Console.WriteLine("Yes");
}else{
Console.WriteLine("No");
}
刪除指定的檔案
Continue Reading例外處理,可以處理一些未知且發生錯誤的情況,例如: 輸入不合法(型別不符)的值、找不到要開啟的資料、處理資料時突然失去連線…。
在C# 例外處理使用 try-catch 陳述式
只要將一般陳述式放在try區塊,
當try區塊發生發生時,就會移向catch區塊,用Exception擷取錯誤
Continue ReadingC# 的 Struct 是一個value type的小群組,
在管理程式變數時,非常好用
例如,對於註冊用戶資料,會包含姓名、性別、住址…. 透過struct,就可以將用戶資料統整成一個群組結構
Continue Reading在C#設計Class,可以搭配運算子(operator)來做到多載(overloading) 並且,要Overloading的運算子,必須是 static 例如:
class Box
{
public int Height { get; set; }
public int Width { get; set; }
public Box(int h, int w)
{
Height = h;
Width = w;
}
public static Box operator +(Box a, Box b)
{
int h = a.Height + b.Height;
int w = a.Width + b.Width;
Box res = new Box(h, w);
return res;
}
}
static void Main(string[] args)
{
Box b1 = new Box(14, 3);
Box b2 = new Box(5, 7);
Box b3 = b1 + b2;
Console.WriteLine(b3.Height);
Console.WriteLine(b3.Width);
}
底下範例中,實現多載 operator +, operator -, operator *, operator /
Continue Readingreadonly與常數用法很像, 相較於常數,readonly通常會用在class流程設計 readonly 在建構子指派值之後,就不能更改
readonly可以在建構子裡面修改
Continue Reading在這裡記錄一些常用的 C# 內置的靜態類別
Continue Reading前面我們有提到,只要class被實例化(instantiated),當下就會立即執行建構子 而這裡要說明的解構子(destructor),也是在class被實例化時,會被執行
解構子,具有下列特性: - 一個class只能有一個解構子 - 會在class執行完成,準備結束時自動被調用 - 無法被呼叫 - 不接受修飾符及參數
Continue ReadingC# get & set 存取子 class的屬性(Property)可以讓讀、寫、運算機制變得更有彈性, 在這裡要介紹屬性的一個特殊的methods,稱為: 存取子(accessors),也可稱為訪問器 存取子包含 get存取子、set存取子
Continue ReadingC# 建構子 Constructors 說明 建構子是一個特殊的Method成員, 只要class被實例化,當下就會立即執行建構子(自動被調用)
在C#中,建構子的名稱必須和class一致,並且不需要定義類型 並且,可以傳入參數
Continue ReadingC# 繼承(Inheritance) Class 說明
物件導向的方便之處在於,可以被拿來重複使用及擴充 例如,今天新增了使用者檢視列表Class 如果在無法更動情況下,想要擴充新增使用者功能 就可以用繼承(Inheritance)的方式 而被繼承的Class,稱之為「基底類別」(Base Class)
但也要特別留意! C#不支援多重繼承 所以,只允許繼承一個「基底類別」(Base Class)
Continue Reading在這裡,會介紹C#的Class 及 Object基本用法
Class基本架構
物件導向開發時,會運用class來作為資料型別
這時,class就好像一個大類別,在這裡面,開發者通常會將具有關聯性的成員(Object、Methods、variable..)統合起來
Continue Reading在 C# 中,除了可以原本的Method,你也可以定義自己的Method
Method具有以下優點: - 可重複使用。 - 易於測試。 - 對方法的修改不影響調用程序。 - 一種方法可以接受許多不同的輸入。
Continue Reading在設計程式過程中,透過continue及break,可以讓程式更有彈性
break主要的任務就是用來跳出迴圈或者陳述式 在流程控制中的 switch ,就包含了break 也就是,當switch滿足條件時,就能透過break來跳脫迴圈 如果是用在邏輯演算,同樣也可以搭配break來跳脫 例如,取出五筆資料
Continue Reading迴圈,一般可以形容在特定條件中,持續重複同一件事情 在程式設計過程,時常會運用迴圈來進行計算或取資料
在這裡,會介紹幾種迴圈 while、for、do-while 及實作
Continue Reading在 C# ,strings 是以物件(Objects)形式存在。 因此,當我們宣告 string 時,事實上是實例化(instantiate)一個字串物件。
另外,C# 提供了許多方法給string使用, 讓我們可以很方便的分析及處理字串相關的計算
Continue ReadingC#提供了許多預設class可以用來儲存資料,其中一個就是array陣列 陣列可以用來儲存多組資料。 在應用於文章、使用者資料、權限管理等介面時,可以先將值儲存成陣列,再透過迴圈的方式一個一個取出來。(迴圈的用法將會在後續提到)
在這裡,會用比較簡潔易懂的方式來解說, 建議可以先從本篇理解陣列用法,再前往官網參考手冊參考更仔細的寫法
Continue Reading