Feeds:
文章
迴響

Archive for 2010 年 08 月

目前常看到的 LINQ 大都用來查詢,如:

var a = new int[] { 1, 2, 3, 4 };

var result = from av in a
          where av % 2 == 0
            select av;

foreach (var v in result) {
    Console.WriteLine(v);
}

每次 LINQ 查詢都要 foreach 一次挺麻煩。是否有什麼辦法可以不要 foreach ?

目前想到一個解法是在 where 使用 Func

var result = from av in a
          where av % 2 == 0
            select av;

Func<int, bool> print = (xx) => {
    Console.WriteLine(xx);
    return true;
};

var result2 = (from result_v in result
               where print(result_v)
               select 0).Count();

不過看起來好像程式變得更長,不過如果 print 部份不列入計算,上述程式其實還是可以縮短成

(from av in a where av % 2 == 0 && print(av) select 0).Count();

還不錯吧… 如果你想串接更多的運算只要繼續 && 下去,如:

var a = new int[] { 1, 2, 3, 4 };
Func<int, bool> print = (xx) => {
    Console.WriteLine(xx);
    return true;
};

var sb = new StringBuilder();
Func<int, bool> sprint = (xx) => {
    sb.Append(xx);
    return true;
};

(from av in a where av % 2 == 0 && print(av) && sprint(av) select 0).Count();
Console.WriteLine(sb.ToString());

不過這種作法好嗎?

廣告

Read Full Post »

今天寫了一個 Windows安裝程式,這個安裝程式並沒有什麼特別,只是安裝過程我使用了 Custom Action,而 Custom Action 我用 Class Library 的 Install Class 來實作,不過當我測試時如果安裝在 "C:Program Files" 目錄下就會出現

"System.IO.FileNotFoundException: 無法載入檔案或組件 ‘file:///C:WINDOWSsystem32Files…’ 或其相依性的其中之一。 系統找不到指定的檔案。, (NULL), (NULL), (NULL)."

後來想到可能是空白的問題,因為 Custom Action 有定義 Custom Data,所以將原來的 /target=[TARGETDIR] 改成 /target="[TARGETDIR]",結果還是錯誤,訊息如下:

"System.IO.FileNotFoundException: 無法載入檔案或組件 ‘file:///C:WINDOWSsystem32Files…XXXX.dll’ 或其相依性的其中之一。 系統找不到指定的檔案。, (NULL), (NULL), (NULL)."

有進步了,至少 Custom Action 的 DLL 名稱有顯示出來,不過還是錯誤,後來網路搜尋到[1]討論到這個問題,原來官方文件[2]有提到

對於 Windows Installer 屬性 (例如傳回目錄的 [TARGETDIR]),除了括號以外,您還必須加入雙引號和後方的反斜線:/name="[TARGETDIR]"。

那個反斜線是怎樣,這麼先進的IDE… 難道不會內部處理掉嗎,真是有夠傻眼的….

參考資料
[1] http://www.windows-tech.info/3/424e3877e87eb3d9.php
[2] http://msdn.microsoft.com/zh-tw/library/2w2fhwzz(VS.80).aspx

Read Full Post »

最近看到許多人釋出 Chromium 線上更新程式,如:GCDW, Chromium Updatermini_installer。不過我個人喜歡免安裝版本,且我習慣使用 Dropbox 同步不同電腦間的資料,所以之前都是老實的從網站下載,其實使用 Python 寫一個自動下載最新版本的程式只要一行就可以達到,如下:

urllib.urlretrieve ("http://build.chromium.org/buildbot/snapshots/chromium-rel-xp/" +  urllib.urlopen("http://build.chromium.org/buildbot/snapshots/chromium-rel-xp/LATEST").read() + ‘/chrome-win32.zip’, "chrome-win32.zip")

不過為了方便辨識下載的版本,我加了點 Code如下:(完整程式可到這裡下載)

import urllib
url = "http://build.chromium.org/buildbot/snapshots/chromium-rel-xp/"
build_id = urllib.urlopen(url + "LATEST").read()
urllib.urlretrieve (url +  build_id + '/chrome-win32.zip', "chrome-win32("+build_id+").zip")

Read Full Post »