PIXNET Logo登入

老爹寫程式

跳到主文

享受每行程式所帶來的新奇與成就. 更熱愛著問題被解決的剎那甜美.

部落格全站分類:職場甘苦

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 11月 11 週日 201215:09
  • [C#] == , Object.Equals 傻傻分不清楚

VS 裡的 ==, 與 Object.Equals 是不同的.
來個程式碼吧, 這樣比較好解釋.
            object a1 = 1;
            object a2 = 1;
            Console.WriteLine(string.Format("object a1==a2 {0}", a1 == a2));//false
            Console.WriteLine(string.Format("object a1.Equals(a2) {0}", a1.Equals(a2)));//true
            Console.WriteLine();

            object s1 = "s1";
            object s2 = "s1";
            Console.WriteLine(string.Format("object s1==s2 {0}", s1 == s2));//true
            Console.WriteLine(string.Format("object s1.Equals(s2) {0}", s1.Equals(s2)));//true
            Console.WriteLine();

            object r1 = new List<string>();
            object r2 = new List<string>();
            Console.WriteLine(string.Format("List<string> r1==r2 {0}", r1 == r2));//false
            Console.WriteLine(string.Format("List<string> r1.Equals(r2) {0}", r1.Equals(r2)));//false
            Console.ReadKey();
(繼續閱讀...)
文章標籤

py3939 發表在 痞客邦 留言(1) 人氣(4,530)

  • 個人分類:.NET
▲top
  • 10月 24 週三 201220:31
  • [C#]自訂的 Class 繼承自 IComparable 以便具有 Sorting 功能

使用過如泛型 List 的人都知道, 當我有數值要排序的時候很簡單, 因為這是泛型具備的功能.  可是當自訂的 Class 要怎樣做呢?
其實很簡單, 只要繼承自 IComparable, 外加實做 CompareTo Method 就可以了. 看看 List.Sort 的說明及其多型就知道了.

這個方法會使用型別 T 的預設比較子 Comparer<T>.Default,以判斷清單項目的順序。 Comparer<T>.Default 屬性會檢查型別 T 是否實作 IComparable<T> 泛型介面,並使用該實作 (如果可用的話)。 如果不是,則 Comparer<T>.Default 會檢查型別 T 是否實作 IComparable 介面。 如果型別 T 不實作這兩種介面,則 Comparer<T>.Default 會擲回 InvalidOperationException。
List.Sort ()   使用預設比較子來排序在整個 List 中的項目。
List.Sort (泛型 Comparison)   使用指定的 System.Comparison 來排序在整個 List 中的項目。
List.Sort (泛型 IComparer)   使用指定的比較子來排序在整個 List 中的元素。

(繼續閱讀...)
文章標籤

py3939 發表在 痞客邦 留言(0) 人氣(5,532)

  • 個人分類:.NET
▲top
  • 10月 10 週三 201214:33
  • [C# Note]Boxing 和 Unboxing

http://msdn.microsoft.com/zh-tw/library/yz2be5wk.aspx
 
Boxing 和 Unboxing

Boxing 處理是將實值型別轉換成 object 型別,或是任何由這個實值型別實作的介面型別。 當 CLR Box 處理實值型別時,它會將值包裝在 System.Object 中,並儲存在 Managed 堆積上。 Unbox 處理則會從物件擷取實值型別。 Boxing 是隱含的;unboxing 是明確的。 boxing 和 unboxing 的概念是 C# 型別系統統一檢視的基礎,其中可將任何型別的值視為物件。

在下列範例中,會以「Box」處理整數變數 i,然後將此變數指派給物件 o。
int i = 123;
// The following line boxes i.
object o = i;  

物件 o 接著即可經 Unbox 處理,並指派給整數變數 i:
o = 123;
i = (int)o;  // unboxing
(繼續閱讀...)
文章標籤

py3939 發表在 痞客邦 留言(0) 人氣(831)

  • 個人分類:.NET
▲top
  • 10月 10 週三 201214:32
  • [C# Note]StringBuilder

StringBuilder
String 或 StringBuilder 物件之串連作業的效能是根據記憶體的配置頻率而定。String 串連作業永遠都會配置記憶體,而 StringBuilder 串連作業只有在 StringBuilder 物件緩衝區太小而無法容納新資料時,才會配置記憶體。因此,如果要串連固定數目的 String 物件,最好使用 String 類別的串連作業。在這種情況下,編譯器 (Compiler) 甚至可能將個別的串連作業結合成一個單一作業。如果要串連任意數目的字串 (例如,如果迴圈串連任意數目的使用者輸入字串),則對於串連作業來說最好使用 StringBuilder 物件。

屬性
Capacity     取得或設定由目前執行個體配置的記憶體可以包含的最大字元數。
Length     取得或設定目前 StringBuilder 物件的長度。

方法
Append     多載。 將指定物件的字串表示附加至這個執行個體的尾端。
AppendFormat     多載。 將格式化的字串 (其中包含零或更多的格式規格) 附加至這個執行個體。每一個格式規格會由對應之物件引數的字串表示所取代。
EnsureCapacity     請確定這個 StringBuilder 其執行個體的容量至少是某一指定的值。
Insert     多載。 在指定的字元位置上將指定物件的字串表示插入這個執行個體。
Remove     從這個執行個體移除指定的字元範圍。
ToString     多載。 覆寫。 將 StringBuilder 的值轉換為 String。

StringBuilder串接字串的迷思
http://blog.darkthread.net/blogs/darkthreadtw/archive/2007/12/15/stringbuilder-for-static-string-concate.aspx
StringBuilder被拿來串接靜態變數=4152ms
string 直接指定靜態值=6ms
@"..."=7ms

StringBuilder與String的字串相接效能大車拼
http://blog.darkthread.net/blogs/darkthreadtw/archive/2009/09/07/article-stringbuilder-vs-string.aspx

(繼續閱讀...)
文章標籤

py3939 發表在 痞客邦 留言(0) 人氣(836)

  • 個人分類:.NET
▲top
  • 10月 10 週三 201214:26
  • [C# Note]List

List
表示可以依照索引存取的強型別物件清單。 提供搜尋、排序和管理清單的方法。
建構函式
List<T>()     其為空白執行個體且具有預設的初始容量。
List<T>(IEnumerable<T>)     從指定之集合複製的元素,且具有容納複製之元素數目的足夠容量。
List<T>(Int32)     這個執行個體是空白且可具有指定的初始容量。

屬性
Capacity     在不需要調整大小之下,取得或設定內部資料結構可以保存的元素總數。
  Capacity 是需要調整大小前 List<T> 可以存放的元素數目。Count 則是 List<T> 中實際含有的元素數目。
  Capacity 永遠大於或等於 Count。 加入元素時,如果 Count 超過 Capacity,則會先藉由自動重新配置內部陣列而增加容量,然後再複製舊元素並加入新元素。
  可以透過呼叫 TrimExcess 方法或明確地設定 Capacity 屬性的方式來降低容量。 當明確地設定 Capacity 的值時,也會重新配置內部陣列以容納指定的容量,並且會複製所有元素。
  http://msdn.microsoft.com/zh-tw/library/y52x03h2.aspx
 
方法
Add     將物件加入至 List<T> 的結尾。
AddRange     將特定集合的元素加入至 List<T> 的結尾。
BinarySearch(T)     使用預設的比較子 (Comparer) 並傳回元素以零起始的索引,來搜尋元素之整個排序的 List<T>。 必須已經依照比較子實作排序過,否則結果會不正確。這個方法為 O(log n) 運算。
BinarySearch(T, IComparer<T>)     使用指定的比較子並傳回元素以零起始的索引,來搜尋元素之整個排序的 List<T>。
Clear     將所有元素從 List<T> 移除。
Contains     判斷某元素是否在 List<T> 中。 這個方法是 O(n) 運算。
CopyTo(T[])     將整個 List<T> 複製到相容的一維陣列,從目標陣列的開頭開始。
Find     搜尋符合指定之述詞所定義的條件之元素,並傳回整個 List<T> 內第一個相符的項目。
IndexOf     多載。 傳回 List 或其中一部分中值的第一個項目之以零起始的索引。     
Insert     將項目插入 List 中指定的索引處。
InsertRange     將集合的元素插入至位於指定索引的 List 中。
Remove     從 List 移除特定物件的第一個相符項目。
RemoveAt     移除 List 中指定之索引處的項目。
Sort     多載。 排序 List 或其中一部分中的元素。
ToArray     將 List 的元素複製到新的陣列。
TrimExcess     將容量設為 List 中項目的實際數目,如果該數目小於臨界值。
(繼續閱讀...)
文章標籤

py3939 發表在 痞客邦 留言(0) 人氣(14,204)

  • 個人分類:.NET
▲top
  • 9月 15 週六 201220:49
  • ThreadPool.QueueUserWorkItem 的初階使用

沒想到要在 C# 中使用, Thread Pool 這麼簡單.
如下簡單範例, 當然實際的程式不可能這樣, 但這是一個好入門概念.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ThreadPoo
{
    class ThreadPool1
    {
        static void Main(string[] args)
        {
            System.Threading.WaitCallback waitCallback = new WaitCallback(MyThreadWork);
            ThreadPool.QueueUserWorkItem(waitCallback, "First");
            ThreadPool.QueueUserWorkItem(waitCallback, "Second");
            ThreadPool.QueueUserWorkItem(waitCallback, "Third");
            Console.WriteLine("Main thread exits.");
            Console.ReadKey();
        }
        static void MyThreadWork(object state)
        {
            Console.WriteLine("Begin of {0}", (string)state);
            Thread.Sleep(5000);
            Console.WriteLine("End of {0}", (string)state);
        }
    }
}
(繼續閱讀...)
文章標籤

py3939 發表在 痞客邦 留言(0) 人氣(7,793)

  • 個人分類:.NET
▲top
  • 7月 09 週五 201017:51
  • C# function 執行失敗時, 重複執行

 
C# function 執行失敗時, 重複執行.
一般當我寫一個 function, 當這個 function 執行失敗, 我們希望可以再執行幾次, 看是否可以成功, 這是蠻常見的情況, 舉一個 ftp  List() function程式的例子就有這樣的需求, 因為 List() 其實是下一個 LIST 的 command, 如下 :
 


public ArrayList List()
{
 Connect();
 OpenDataSocket();
 try
 {
     SendCommand("LIST");
 }
 catch (Exception ex)
 {
     log.Warn(MethodBase.GetCurrentMethod() + ex.Message);
     throw ex;
 }
 ReadResponse();
 return list;
}



(繼續閱讀...)
文章標籤

py3939 發表在 痞客邦 留言(0) 人氣(2,628)

  • 個人分類:.NET
▲top
  • 4月 28 週三 201018:30
  • DBConcurrencyException : Concurrency violation: the UpdateCommand affected 0 of the expected 1 records.

在解說 DBConcurrencyException 之前有一些觀念必須先說清楚, 所以就先講一些必要的觀念, 最後在說明主題.
1.使用 DataAdapter.Update 時,DataAdapter 會分析已進行的變更,並執行適當的命令 (INSERT、UPDATE 或 DELETE), 詳細的MSDN文章說明參考 : 以 DataAdapter 更新資料來源. 一般的程式這樣就夠用了.
程式範例如下 : 
(繼續閱讀...)
文章標籤

py3939 發表在 痞客邦 留言(0) 人氣(592)

  • 個人分類:.NET
▲top
  • 4月 13 週一 200911:31
  • NMock Example with c#

NMock 詳細的說明可以上官方網站詳讀. 簡單的說NMock 是一個 .NET 的動態 mock 物件, 當我們的測試標的與其他 class 有關聯時, 提供一種模擬技術, 方便於我們可以單獨測試此一標的 class.
舉一個學生成績系統為例 : 有兩個人正在進行此系統開發.
Jack 負責 TotalSummary class, 此 class 有一個 Sum method, 會傳回所指定的同學 ID 所有科目的成績總和.
Alan 負責主程式, 進行到計算出第一名的同學是誰 GetTop1 method, GetTop1 實做的方式是依據每位同學的 ID 當作輸入值, 呼叫 TotalSummary.Sum() 取的總分來判斷出第一名的同學.
(繼續閱讀...)
文章標籤

py3939 發表在 痞客邦 留言(0) 人氣(293)

  • 個人分類:.NET
▲top
1

個人資訊

py3939
暱稱:
py3939
分類:
職場甘苦
好友:
累積中
地區:

熱門文章

  • (17,201)Oracle over partition by
  • (14,204)[C# Note]List
  • (14,017)SQL 從另一個表格更新資料
  • (8,319)Oracle 帳號密碼管理
  • (7,793)ThreadPool.QueueUserWorkItem 的初階使用
  • (7,506)CREATE MATERIALIZED VIEW
  • (6,696)Create/Alert Partition Table
  • (4,005)Oracle PIPE ROW 產生一個想要的虛擬 Table.

文章分類

  • Oracle (27)
  • P-Management (1)
  • 碎碎念 (1)
  • .NET (9)
  • 未分類文章 (1)

最新文章

  • [C#] == , Object.Equals 傻傻分不清楚
  • [C#]自訂的 Class 繼承自 IComparable 以便具有 Sorting 功能
  • [SQL] 比較 exists or in 誰比較快
  • [C# Note]Boxing 和 Unboxing
  • [C# Note]StringBuilder
  • [C# Note]List
  • ThreadPool.QueueUserWorkItem 的初階使用
  • imo 遇到 ORA-00904: "M_ROW$$": 無效的 ID
  • 利用 Trigger 自己做資料的 Replication
  • ORA-14402: updating partition key column would cause a partition change

最新留言

  • [20/01/11] 訪客 於文章「[C#] == , Object.Equ...」留言:
    你好,我測試發現第二段 object s1 = "s1";...
  • [19/03/29] 訪客 於文章「Oracle PIPE ROW 產生一個...」留言:
    END SEQ_TABLE; 那邊多了 SEQ_TABLE...
  • [14/09/18] 訪客 於文章「Oracle over partitio...」留言:
    好清楚的介紹 謝謝...

文章精選

文章搜尋

誰來我家

參觀人氣

  • 本日人氣:
  • 累積人氣: