2011-12-25 145 views
0

我有這個寄存器,寄存器中的所有對象,我需要:堆棧溢出

public static class ObjectRegister 
{ 
    public static List<IObject> RegisteredObjects = new List<IObject>(); 
    static ObjectRegister() 
    { 
     RegisteredObjects.Add(new Object1()); 
     RegisteredObjects.Add(new Object2()); 
     RegisteredObjects.Add(new Object3()); 
    } 
} 

接下來,我有這個功能,它檢查一個列表,如果該列表中的項目通過測試,它創建了一個對象實例,並將其添加到列表:

public static List<IObject> Scan(List<parametar> list) 
    { 
     List<IObject> neededObjects = new List<IObject>(); 
     foreach (IObject registeredObject in ObjectRegister.RegisteredObjects) 
     { 
      foreach (parametar param in list) 
      { 
       if (registeredObject.Test(param)) //returns true or false 
       { 
        neededObjects.Add(registeredObject.CreateInstance(param)); 
       } 
      } 
     } 
     return connectedObjects; 
    } 

這裏是Object1的CreateInstace方法:

public IObject CreateInstance(parametar param) 
    { 
     return new Object1(param); 
    } 

這裏是構造函數:

public Object1(parametar newParam) 
    { 
     this.param = newParam; 
    } 

該公司密切關注該行trowing StackOverflow的例外:

this.param = newParam; 

嘗試了所有的可能性,創建一個實例,默認的構造函數,空對象等等等等,但是毫無效果... 有任何想法嗎?

感謝名單

編輯: 代碼發送到Object1類:

public class Object1: IObject 
{ 
    public parametar param 
    { 
     get { return this.param; } 
     set { this.param = value; } 
    } 

    internal Object1() { } 

    public Object1(parametar newParam) 
    { 
     this.param = newParam; 
    }   


    public bool test(parametar param) 
    { 
     // I do the propper checking of the param here, and return the result 
    } 


    public IObject CreateInstance(parametar param) 
    { 
     return new Object1(param); 
    } 
} 
+0

您需要顯示Object1類的代碼。 – 2011-12-25 17:35:48

+3

看看調用堆棧。 – SLaks 2011-12-25 17:36:00

+2

你真的有一個叫'parametar'的班嗎? – 2011-12-25 17:39:35

回答

9

這是你的問題,在Object1:

public parametar param { get { return this.param; } set { this.param = value; } 

該屬性遞歸調用自己 - 這也正是爲什麼你會遇到堆棧溢出。不要這樣做。相反,你可能要麼想要一個自動實現的屬性:

public parameter param { get; set; } 

或使用專用支持字段:

private parametar param; 
public parametar Param { get { return param; } set { param = value; } 

此外,我強烈建議你開始按照.NET naming conventions,並支付注意類型和成員名稱中的拼寫。

所以你可能希望你的班級被稱爲Parameter - 儘管我個人至少嘗試使它更具描述性,例如, QueryParameter或類似的東西。同樣Object1不完全是一個語義上有意義的名字 - 我希望它不是您的真實代碼中的名稱。

+0

謝謝:)那是問題 – GregoryHouseMD 2011-12-25 17:48:58