不知讀者們有沒有遇到過如下的狀況? 假設你需要從某個 CSV 檔案中匯入資料; 我們已經知道每個欄位是什麼。然後你為這份資料建立了類別, 也為每一個需要的欄位建立了屬性。當然, 你也一定知道每一個欄位是第幾欄, 但是 Visual Studio 並不知道。你必須每次都去查, 才能知道哪個欄位是哪一欄。假設 CSV 檔案內容如下
2015/7/30
2015/7/21
[VS] VS2015 新功能簡介
對 Windows 開發者而言, 今年 (2015) 七月真是熱鬧的月分。首先, Visual Studio 2015 在 7/20 正式發行, 而 Windows 10 也緊跟著在 7/29 正式發行。這次的 Visual Studio 有以下幾個相關的版本
2015/7/13
[C#] C# 6.0 中新字串格式化功能簡介
在 C# 6.0 中新增了方便的 String Interpolation 的功能, 它能進一步將原本的 string.Format 功能簡化。我們現在就可以使用 Visual Studio 2015 來做測試
2015/5/24
[Regex] 正規表示式的應用
許多人很害怕 Regular Expressions, 除了它的確不好學之外, 主要是因為大家普遍不太了解它能拿來做什麼。所以我在這裡要陸續舉出一些實際上的應用範例, 向讀者們示範 Regular Expression 在實際生活中能幫我們解決什麼問題。依照我的慣例, 當我想到什麼, 就會在原來的文章裡直接修改, 不另做通知, 也不會再寫另一篇新的文章
2015/3/11
[CSS] 以 CSS 自製物件背景
CSS3 所提供的許多新功能真的可以幫我們節省許多時間與精力。對於我這種沒有美工基礎的程式設計師來說, 如果想幫 HTML 元件做個可以看的背景圖, 雖然不是辦不到, 但是如果自己畫, 可能花了許多工夫, 還是覺得難看; 如果上網路去找, 除了隨時有侵權的疑慮, 同樣要花掉許多時間。後來轉念一起, 為何不使用 CSS 本來就提供的功能? 東西是自己做的, 高興怎麼用就怎麼用, 改起來也容易。
首先, 先來看看成果, 再來做技術性的說明:

2015/1/23
2015/1/7
[ASP.NET] 找不到方法驚魂記
對於寫網頁的朋友而言, 或許和我一樣, 最害怕的問題就是, 在冗長的開發過程中解決了很多疑難雜症, 一路打通關之後, 卻在終於要發行到目標網站時, 才發生問題。這就像千辛萬苦爬上了 101 的頂樓, 才發現門竟然打不開
2014/12/14
2014/11/6
[入門] .Net 非同步處理與同步機制全解析 (三)
.Net 4.5 新增的 Async/Await 功能也出來一陣子了, 我相信有許多人都已經對它相當熟悉。不過我在本文中要把重點往回拉一點點, 談一下 .Net 中早已提供的非同步功能。坦白說, 這才是我一開始想寫的東西。
在「[入門] .Net 非同步處理與同步機制全解析 (一)」一文中, 我們已經看過以手動方式叫出執行緒以進行非同步作業的方法。在這裡, 我要介紹以委派方式以進行非同步作業的方法
2014/10/29
當隨機不再隨機的時候
前幾天, 我寫了一個 Unit Test, 用來測試一個非同步的資料庫寫入方法。如果我一次寫入一百筆, 那麼結果很順利; 寫入兩百筆, 也很順利; 一路測到一千筆, 都很順利, 都能夠在一秒之內成功結束。直到測到一千一百筆, 突然這個 Unit Test 執行不完了。我看到測試總管中狀態條不停地跑, 完全沒有停止的跡象, 直到我把測試取消為止
2014/10/23
解決 .Net 日期與 SQL 日期的匹配問題
雖然這是一個陳年的老問題, 我在實際應用中卻從來沒有給我帶來麻煩 -- 直到今天。當然, 這也是一個陷阱; 如果我不是以前就知道有這個問題, 我恐怕會百思不得其解。
這個問題很簡單, 相信許多人都有經驗: 把一個日期欄位寫進資料庫, 再取出來時, 發現兩個日期並不相等。它的陷阱在於, 這兩個日期可能有完全相同的年、月、日、時、分、秒, 但是寫進去 SQL 之後, 再讀出來, 它的 millisecond 值卻不同。Ticks 也不同。這個問題使得我的單元測試始終過不了
2014/10/6
[Winform] 自訂 app.config 區段
在撰寫 Windows Form 程式時, 我們時常會在 app.config 中放入一些參數。如果把它們存放在 appSettings 區段中, 那麼我們就可以很方便地使用 ConfigurationManager.AppSettings["MyKey"] 取出。但是, 如果我們要放進去的資料稍為複雜一點, 操作起來就沒那麼直覺。例如, 我們可以將鍵值以 a-XXX, b-XXX 方式命名, 再使用字串處理方式分出群組。
一般而言, 我們通常不會在 app.config 中存入大量資料, 也不會存入太複雜的資料 (否則你應該使用更適合的格式檔案, 例如 XML 或 JSON), 更不會進行大量且持續的存取, 所以上述做法是 OK 的。然而, 如果你和我一樣有奇怪的潔癖, 或許你也會覺得上述做法有點 low。我們就是要去找最有彈性的做法 (明明就用不到)。
2014/9/29
[ASP.NET] 讓游標停駐在文字框最後一字
最近遇到一個小需求。原本我為了讓使用者方便, 在不使用 TimePicker 的情況下, 讓他們可以手動方式輸入日期時間 (若使用 DateTimePicker 之類的工具, 效率會減少十倍)。然後我又幫他們自動加入當天的日期 (因為在大多數情況下, 他們需要輸入的日期都是當天, 但是都不是現在時間), 例如 "2014/9/29 "。接著, 我又下了 autofocus 屬性, 當網頁載入後, 讓這個文字框自動成為焦點, 因為這是第一個必須輸入的欄位。如此, 他們只要輸入時間的部份就行了。
問題是, 他們每次要輸入時間時, 都必須再按一下滑鼠游標或者 End 鍵, 才能讓文字游標指到日期的後面, 這樣才能開始輸入時間。雖然這只是一個小工夫, 但是總讓人覺得討厭! 難道不能讓游標自動跑到最後面嗎?
2014/9/12
[Winform] 在 RichTextBox 中著色的偷懶小技巧
在寫 Windows Form 時, 如果不花錢的話, 那麼除了 TextBox 這個文字控制項, 就只剩 RichTextBox 可用了。可惜的是, 雖然都是 RichTextBox, Winform 裡的 RichTextBox 卻不像 WPF 的 RichTextBox 那樣可以賦予方便的屬性。因此, 即使只是對 RichTextBox 裡的文字做著色這般簡單的動作, 都不見得容易, 也不直覺
2014/7/30
[ASP.NET] Server Exception Log 速成
在各式網站中採用了一些 Log 套件之後, 我覺得其實有時候我們不一定需要那麼多複雜的功能, 或許我們只需要偶爾攔截並記錄一些例外錯誤而已。這時候, 我會推薦大家使用最簡單的方法, 也就是把網站中出現的所有例外情況都記在 Server 的 Event Log 裡面
2014/7/17
Adobe 與 Google 共同推出免費字型 Noto Sans
Adobe 和 Google 共同推出了一組適用於日文、中文、韓文、拉丁文、希臘文和西里爾字母的開源字體「思源黑體」(Noto), 有興趣者可以前往免費下載。其中中文的部份提供了一個稱為 Noto Sans 的無飾邊字型 (San Serif)。很可惜地, 並沒有同時提供飾邊字型 (Serif)。這組字型內含總共七個 .otf 黑體字型, 從最細 (Thin) 到最粗 (Black), 涵括了從內文到粗標的所有應用領域, 實在是佛心來著
2014/7/6
[Regex] .Net 4.5 中新增的 Regex 建構式參數
我曾在「[Regex] 值得注意的 Regular Expression 樣式的潛在風險」一文中介紹過, Regex 樣式中若含有無意或惡意的某些寫法時, 可能會造成形同 DoS (Denial of Service, 阻斷式攻擊) 的問題, 使得伺服器陷入無窮無盡的無意義運算中。事實上, 在撰寫正規運算式的樣式時, 的確很容易寫出有問題的樣式, 很多時候甚至不是刻意造成的; 愈是初學者, 愈容易造成這個問題
2014/5/1
[入門] JSON.NET 入門
JSON.NET 是 James Newton-King 所開發的 JSON 程式庫, 他從 2005 年底著手開發, 於 2006 六月發表, 至今已歷經將近十年的時間。英雄出少年, James 是個住在紐西蘭的年輕人, 現年才 31 歲而已。他稍後把 JSON.NET 移到 CodePlex 成為 Open Source 專案, 跟隨者有四千多人。目前 JSON.NET 是 Visual Studio 中最受歡迎的 NuGet 套件之一, 迄今已有五百一十萬個下載數, 僅略遜於 jQuery 的五百八十萬, 卻勝過 Entity Framework 的四百九十萬
2014/4/28
[入門] T4 入門教學
T4 是從 Visual Studio 2008 之後加入的新功能, 目的是提供一個文字範本, 讓開發者以動態方式產生文字內容, 例如程式碼。或許你會覺得 "T4" 這個名字很奇怪, 但事實上它是 "Text Template Transformation Toolkit" 縮寫。因為它的開頭字母剛好是四個 T, 所以就稱為 T4。
Visual Studio 本身大量地使用 T4 作為動態程式碼的輸出工具。當然, 我們也可以使用 T4 來產生我們自己的程式碼。不過, 我們不僅可以產生程式碼, 基本上, 我們可以使用它來產生各種文字