2015-03-03 62 views
-1

我想將C#2008代碼轉換爲代碼C#2005,我不明白命令C#2008切換到C#2005,請參閱下面的錯誤代碼是否可以解決錯誤命令呢?運行在C#2008中的代碼非常好將C#2008代碼轉換爲C#2005代碼?

private void textBox1_TextChanged(object sender, EventArgs e) 
{ 
    string str = textBox1.Text.Trim(); 

    if (!string.IsNullOrEmpty(str)) 
    { 
     // Error in here 
     Expression<Func<CustomData, bool>> expr = n => GetCondition(n, str); 
     this.gridControl1.DataSource = this.lstCustomData.Where<CustomData>(expr.Compile()).ToList(); 
    } 
    else 
     this.gridControl1.DataSource = this.lstCustomData; 
    this.gridControl1.RefreshDataSource(); 
} 

public class CustomData 
{ 
    // Error in here 
    public int col1 { get; set; } 
    public string col2 { get; set; } 
    public string col3 { get; set; } 
    public int col4 { get; set; } 
} 
+0

我已經固定的代碼的格式,但我離開你的原句,因爲我不明白足以改善它。請注意,涉及的語言版本是3和2 ... 2008和2005是Visual Studio的版本。現在,還不清楚*爲什麼要使用C#2,而不是更清晰的C#3代碼。你能解釋一下嗎?如果僅僅是你不瞭解C#3的特性(lambda表達式,擴展方法,自動實現的屬性),你最好不要學習這些。 – 2015-03-03 07:12:18

+0

另一個很好的問題是你使用的是什麼版本的.NET框架,因爲語言只是謎題的一部分 - 如果你使用相應的.NET 2.0,它也會錯過一些類型。 – 2015-03-03 07:15:26

+0

Well - GetCondition根據用於過濾lstCustomData的輸入返回某些內容。弄清楚GetCondition是如何工作的,你可以簡單地重寫它......但它引發了這個問題;是否需要運行C#2並且無法升級到3.5? – 2015-03-03 07:15:36

回答

0

如果我記得C#2.0沒有lambda表達式和表達式。 Lambdas有一個非常酷的功能 - 它們可以捕獲局部變量並使用它們。如果你不能直接使用它們,你需要模仿他們的行爲。 C#3.0編譯器如何處理實際的lambda表達式?

它創建一個Closure類,其中包含要捕獲的所有數據的字段,創建此類的實例,其中定義了lambda並將所有數據放入字段中。它還創建一個與lambda具有相同簽名的類的方法,並使用此方法。

這種技術應該可以解決您的問題,但會使您的代碼更復雜一些。您需要創建這樣一個私有類:

private class WhereLambda 
{ 
    private string str; 
    public WhereLambda(string str) 
    { 
     this.str = str; 
    } 

    public bool IsTrue(CustomData data) 
    { 
     return GetCondition(data, this.str); 
    } 
} 

而且使用這樣的

WhereLambda lambda = new WhereLambda(str); 
this.gridControl1.DataSource = this.lstCustomData.Where<CustomData>(lambda.IsTrue).ToList(); 
+0

您可以將代碼C#2008轉換爲C#2005? – 2015-03-03 07:20:09

+0

我有一些回憶C#曾經是如何:) – 2015-03-03 07:26:02

+0

這段代碼如何轉換?它使用自動屬性 [code] public class CustomData { // Error in here public int col1 {get;組; } public string col2 {get;組; } public string col3 {get;組; } public int col4 {get;組; } } [/ code] – 2015-03-03 07:33:35