2016-05-13 4 views
-1

ich diesen Fehler auf der Setter Linie „Eine nicht behandelte Ausnahme des Typs‚System.StackOverflowException‘aufgetreten in WebFormsApplication1.dll“ Was eine elegante Weise ist Property1 zu manipulieren, was ich hinzugefügt Getter und Setter für in einer Master-Seite (siehe unten), dann habe ich versucht, es in Methode1() zu manipulieren und schließlich Methode1() in OnInit aufrufen.setzte neuer Wert auf Eigentum in C# Webformular Anwendung

namespace WebFormsApplication1 
{ 
    public partial class SiteMaster : MasterPage 
    { 

     public string Property1 
     { 
      get 
      { 

       return System.Configuration.ConfigurationSettings.AppSettings["key1"]; 
       //gets value from config file where pair key-value is stored 
      } 
      set 
      { 
       Property1 = value; 
      } 
     } 

     public void method1() 
     { 
      Property1 = Property1 + "stringToAppend"; // manipulate property here 
     } 

     protected void Page_Init(object sender, EventArgs e) 
     { 

      method1(); 

      ..... 
     } 
    } 
} 

Im Site.Master.aspx habe ich <%= Property1 %> Wenn ich den Setter nicht fügen die Eigenschaft nur gelesen wird. Vielleicht sollte ich es im Setter manipulieren? Ich hatte gehofft, dass ich es getrennt für erhöhte Modularisierung tun könnte. Dank

Antwort

0

das Problem ist hier:

set 
{ 
    Property1 = value; 
} 

Sie können es nicht, weil Rekursion hier auftritt und keine Bedingung zu verlassen, können Sie diese Eigenschaft nicht in seinem eigenen Setter festlegen, sollten Sie einige haben Feld und es in Setter gesetzt:

public string someValue = System.Configuration.ConfigurationSettings.AppSettings["key1"];  

public string Property1 
{ 
    get 
    { 
     return someValue; 
    } 
    set 
    { 
     someValue = value; 
    } 
} 

Oder können Sie auto-Eigenschaft:

C# 6:

public string Property1 {get;set;} = System.Configuration.ConfigurationSettings.AppSettings["key1"]; 

oder niedriger als C# 6 - Sie sollten Sie Eigenschaft deklariert und initialisiert es in contructor oder Methode:

public string Property1 {get;set;} 

public void ConstructorOrMethod() 
{ 
    Property1 = System.Configuration.ConfigurationSettings.AppSettings["key1"]; 
} 
Verwandte Themen