2014-07-15 15 views
-1

我有類似下面的模型......如何使用C#中的linq使用即時參考訪問常量字段?

public class Class1 
    { 
     public const string Example = "Example"; 
     public string Name { get; set:} 
    } 

,並命名爲「類2」多了一個模型,其中「1類」作爲虛擬像下面...

public class Class2 
    { 

     public int Id{get; set;} 

     public virtual Class1 class1obj {get; set;} 
     piblic int class1objId {get; set;} 

    } 

現在我有一個服務的方法來獲取值由模型「類2」舉行,現將

GetClass<T>(); 

提到的,我準備用下面的代碼來獲取數據:

var data = GetClass<Class2>(s => s.class1obj.Example == "Example1"); 

但是,當我鍵入上面的代碼,我試圖訪問常量像s.class1obj.Example它拋出錯誤和智能感知也只顯示「名稱」屬性,並沒有顯示常量在「 Class1「?爲什麼,我無法訪問常量字段?我正在學習過程中,請任何人都可以幫助我...

+0

顯然,你無法通過實例訪問常量。它需要通過classname來訪問 –

回答

2

你不能通過實例訪問常量。你需要使用類名。例如:

var ex = Class1.Example; 

另一種方法是,以訪問屬性添加到您的類:

public Class1 
{ 
    public const string Example = "Example"; 

    public string ExampleConst { get { return Example; } } 
} 
1

常量字段是隱式靜態的。這意味着它們不屬於實例,而屬於類型。因此,要訪問常量字段,您需要訪問的不是類實例,而是類型對象,就像您使用靜態字段或方法一樣。在你的情況下,這意味着你訪問Class1.Example而不是class1obj.Example

1

示例是一個常量,將其視爲類的屬性而不是對象實例的屬性。

要訪問它,你會打電話

var val = Class1.Example; 

var data = GetClass<Class2>(s => Class1.Example == "Example1"); 

然而,這沒有任何意義,我(因爲它是一個常數,它會永遠返回true)。我不完全確定你要在你的lamba中做什麼,所以很難再提供任何建議......

相關問題