2012-07-15 149 views
0

我有一個列表,它包含'Reference'類作爲泛型類型。所以,我應該能夠填補我的名單與「參考」類的子類,但是編譯器報錯:編譯錯誤:Property not recognized

'naturalCalc.Enginee.Reference' does not contain a definition for 'Opener' and no extension method 'Opener' accepting a first argument of type 'naturalCalc.Enginee.Reference' could be found (are you missing a using directive or an assembly reference?) (CS1061) ToPostfix.cs:27,34

在「ToPostfix」類撥碼開關確保項目具有「開瓶器」屬性在第二種情況下。

// The 'MyBrackets' class which contains the 'Opener' property. 
public class MyBrackets : naturalCalc.Enginee.Reference 
{ 
    private bool opener; 
    public MyBrackets(bool opener) 
    { 
     this.opener = opener; 
    } 

    public bool Opener { get { return this.Opener; } } 
} 

// The 'ToPostfix' class in which the error is taken place. 
class ToPostfix 
{ 
    List<Reference> infix = new List<Reference>(); 
    List<Reference> postfix = new List<Reference>(); 

    public ToPostfix(List<Reference> infixForm) 
    { 
     this.infix = infixForm; 

     foreach (Reference item in this.infix) 
     { 
      switch (item.ToString()) 
      { 
       case "naturalCalc.Enginee.MyFloat": 
        this.postfix.Add(item); 
        break; 

       case "naturalCalc.Enginee.MyBrackets": 
        if (item.Opener) 
        { 
         this.postfix.Add(item); 
        } 
        break; 
      } 
     } 
    } 
} 

回答

1

你應該嘗試,如果可能的方法進入界面。

如果無法做到這一點,你可以動態測試的類型和投如下:

Opener opener = item as Opener; 
if (opener != null) 
{ 
     if (opener.Opener) 
     { 
      this.postfix.Add(item); 
     } 
} 

而且你消氣無法正常工作。你也應該學會使用自動實現的屬性:

public class MyBrackets : naturalCalc.Enginee.Reference 
{ 
    public MyBrackets(bool opener) 
    { 
     this.Opener = opener; 
    } 

    public bool Opener { get; private set; } // Auto-implemented property. 
} 
0

這是不是一個完整的答案,但我相信,有您MyBrackets類的錯誤。 openerOpener是不一樣的財產。

我相信它應該是:

public class MyBrackets : naturalCalc.Enginee.Reference 
{ 
    public MyBrackets(bool opener) 
    { 
     this.Opener = opener; 
    } 

    public bool Opener 
    { 
     private set { this.Opener = value; } 
     get { return this.Opener; } 
    } 
} 

問候

+0

OP在'get'中只需要一個小寫的'opener'。 'public bool Opener {get {return this.opener; }}' – 2012-07-15 17:08:37

+0

@Kevin是的,那就夠了=) – 2012-07-15 17:09:50

0

您正在使用的ReferenceList,但確定在MyBracketClassOpener財產。如果您希望從Reference實例訪問您的資產,請將其移至此處。