Wednesday, June 24, 2009 - 文章

就是那個光...

今早噗浪時看到這個...

不知不覺間,Karma已經超過81,抵達涅槃之境,獲得太極勳章一枚。(怪了,佛教的涅槃配上道教的太極,這是萬流歸宗嗎?)

依我個人的觀點,噗浪/Twitter是Internet從BBS, Homepage, Blog, Forum, MSN(Instant Messenger)之後,另一項全新的應用突破。它帶有幾分MSN的即時性,在社群涵蓋度上直追BBS,尤其噗浪的討論串概念更營造出另一塊"鄉民"得以大展身手的空間。(我認為現在的記者除了上PTT、訂部落格之外,少不了要加幾個名人噗浪當好友才不會Lag)

歷經幾個月的使用經驗,我發現噗浪有些有趣的特性是其他平台、溝通工具無法取代的:

  • 雞犬相聞好親切:
    台中現在在下大雨、高雄今天太陽很大、早上在XX路口"又"看到車禍(我一直懷疑某噗友的體質特殊,車禍老是如影隨行)... 每天都可以即時收到來自台灣各個角落的最新消息,讓人有莫名的親切感。鄉親吶,這就是愛台灣啦~~~
  • 聚沙成塔蒐遺珠:
    說實在說,過有許多技術上的小Tip,不到自成一篇Blog文章的規模,但又有幾分記錄下來的價值,十分雞肋。噗浪算是很不錯的部落格替代平台,寫個幾行貼上去,分享兼備忘(中年人很需要),而我也在噗浪上檢到不少部落客沒貼成文章的技術遺珠。
  • 產業經驗大家談:
    我結識的噗友多在資訊產業,沒機會實際認識那麼多人,噗浪倒是給了機會跟一大群同產業的朋友討論專案執行、軟體工程、客戶習性、甚至公司文化議題的機會,是很棒的經驗交流管道。
  • 即時救援人情濃:
    遇到緊急難解問題,噗一聲很快就有回音,噗浪的輕便與即時性,讓參與社群的人更不吝於發聲。畢竟,噗一下比在討論區/部落格上留言更方便更自然。另外,我一定要推一下它的即時性! 有一次我發現MSDN下載有問題,但不確認是否為我所在網路的個別問題,在噗浪上問一聲,不到幾分鐘就得到許多噗友的熱心回應,證實是我的網路被MSDN網站排擠了(鳴~~)。在日益冷漠的現代社會裡,還能感受到濃濃的人情味,是很難得的事。
  • 喊苦渲洩兼取暖:
    噗浪不若部落格正式,閒聊性質更強,回應時效也高,無形中也是大家釋放負面能量的場所。吐吐苦水、喊喊累、罵奧客,都能獲得噗友的關心。我在想,這應該比下鄉取暖來得簡便省事多了,可惜看守所不給上網。
  • 流行八卦一把抓:
    只要加到幾個消息靈通又愛分享的噗友,就能確保你在第一時間掌握最新消息。最近已有數次經驗,同事傳來有趣的影片文章,都已在噗浪河道上出現過。

你今天噗浪了嗎?

CODE-enum, string, int間的轉換

專案剛好用到列舉型別(enum)的處理,之前雖已寫過一篇相關文章,但這次又多用到了找上下筆及列出清單的特性,索性再整理一篇更完整的。

以下示範列出所有列舉項目及對應數值、字串、整數與列舉間的雙向轉換寫法,還有尋找上一個、下一個列舉值的簡陋做法(很不嚴謹,僅為示意,想深入研究的人這裡有個LINQ範例可參考)。注意: 字串轉列舉無對應時會有Exception,數字轉列舉無對應值時不會出錯而是出現未列舉宣告值的數字。(列舉居然可以出現非預先設定範圍內的值,不就打破了其存在的意義? 這點始終讓我很狐疑)

using System;
 
public class CSharpLab
{
    public enum State
    {
        Init, Open, Proc, Close, Done = 9
    }
    public static void Test()
    {
        State st = State.Init;
        //列出所有名稱
        foreach (string en in Enum.GetNames(typeof(State)))
            Console.WriteLine("Enum Name: " + en);
        //列舉背後有值, 預設由零開始排, 但也可自訂
        //TIPS: typeof(State)與st.GetType()都可取得列舉型別
        foreach (int v in Enum.GetValues(st.GetType()))
            Console.WriteLine("Enum Value: " + v.ToString());
        //將列舉轉為字串
        Console.WriteLine("Enum To String: " + st.ToString());
        //將字串轉為列舉
        st = (State)Enum.Parse(typeof(State), "proc", true);
        Console.WriteLine("String To Enum: " + st);
        try {
            Console.WriteLine("String To Enum(not found): " + 
                                    Enum.Parse(typeof(State), "WTF"));
        } catch (Exception ex) {
            Console.WriteLine("Error when Enum.Parse: " + ex.Message);
        }
        //將列舉轉為數字
        Console.WriteLine("Enum to Int: " + st + " " + (int)st);
        //將數字轉回列舉
        st = (State)9;
        Console.WriteLine("Int to Enum: " + st);
        //小心數字轉換對不上時不會有錯誤,但會出現非列舉值
        st = (State)100;
        Console.WriteLine("Int(100) to Enum: " + st);
        //如果數字有連續,可以用+1, -1找上一個下一個
        //注意: 以下範例並未檢查邊界及數值不連續的狀況, 
        //並非嚴謹寫法,僅為簡單示意,勿用於正式用途
        st = State.Proc;
        State next = (State)((int)st)+1;
        State prev = (State)((int)st)-1;
        Console.WriteLine("Now = " + st + " Next = " + next + " Prev = " + prev);
    }
}
 

執行結果如下(以上程式可用Mini C# Lab直接執行),橘色為字串轉換無法對映的狀況,綠色為數字轉換無法對映的狀況。

Enum Name: Init
Enum Name: Open
Enum Name: Proc
Enum Name: Close
Enum Name: Done
Enum Value: 0
Enum Value: 1
Enum Value: 2
Enum Value: 3
Enum Value: 9
Enum To String: Init
String To Enum: Proc
Error when Enum.Parse: Requested value 'WTF' was not found.
Enum to Int: Proc 2
Int to Enum: Done
Int(100) to Enum: 100
Now = Proc Next = Close Prev = Open

最後補充一個用法,enum可以加上[Flags]宣告,再將各值設成0x01, 0x2, 0x4, 0x8...,就可以當成旗標用myFlags = MyEnum.Flag1 | MyEnum.Flag2的方式操作,myFlags.ToString()時會傳回Flag1, Flag2。MSDN上有完整的範例,這裡不再贅言。

Posted 24 June 2009 08:23 AMJeffrey | 2 comment(s)
Filed under:

搜尋

Go

<June 2009>
SunMonTueWedThuFriSat
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011
 
RSS
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


BlogLook Score and Rank

Syndication