2013-05-16 41 views
1

我是一個新手,所以我很抱歉,如果這是一個愚蠢的問題。我將我的界面綁定到我創建的類的字段上。我作爲類型T的列表發起了類,現在我試圖將字段的賦值遞增到列表的索引。C#有沒有辦法像構造函數一樣使用方法

我的代碼看起來像這樣。 我的課:

class MyClass 
{ 
    public string ID { get; set; } // I want these to increment 
    public string MyVar { get; set; } 

    public MyClass() 
    { 
     this.ID = ""; 
     this.MyVar = ""; 
    } 

    public MyClass (string id, string myvar) 
    { 
     this.ID = id; 
     this.MyVar = myvar  
    } 

    public static List<MyClass> Query(string datasource) 
    { 
     XElement data = XElement.Load(datasource); 
     List<MyQuiz> query = (from d in data.Descendants("Object") 
           select new MyQuiz((string)d.Element("ID"), 
               (string)d.Element("MyVar") 
          )).ToList(); 
       return query; 
    } 

    public static List<MyClass> Assign (List<MyClass> assign, int i) 
    { 
     i++ 

     //Can't do this because it's static, need another way! 
     this.ID = assign[i].ID; 
     this.MyVar = assign[i].MyVar; 
    } 

發起代碼

int i = 0; 
List<MyClass> myClass = new List<MyClass>(); 
myClass = MyClass.Query("data.xml"); 
MyClass.Assign(myClass, i); 

和XML

<root> 
    <Object> 
     <ID>1</ID> 
     <MyVar>TESTING</MyVar> 
    </Object> 
<root> 

一切正常,除了分配方法,有什麼建議?

+0

沒有分號(;)後,我的增量和有一個}在你的方法結束時失蹤 –

+5

目前還不清楚你試圖達到什麼。 「分配」方法的目的是什麼? –

+0

Assign方法假設要做什麼? – Thomas

回答

0

如果你的類型有一個狀態,最好在使用它之前創建這個類的一個實例。 單從方法去除靜態的關鍵字,然後使用下面的代碼:

List<MyClass> myClass = new List<MyClass>(); 
MyClass myClassInstance = new MyClass(); 
myClass = myClassInstance.Query("data.xml"); 
myClassInstance.Assign(myClass, i); 
+0

它不會讓我使用「分配」實例。 – evilsushi

+0

@evilsushi你需要從方法'Assign'中去掉'static'# –

+0

這解決了我的問題,我創建了模型視圖,然後創建了一個類的實例,然後我就可以綁定到它。我仍然在增加索引時遇到問題,但我認爲問題在於,我仍然在爲iCommand接口適當的語法而掙扎。 – evilsushi

0

它看起來像你試圖做這樣的事情:

public static List<MyClass> Assign (MyClass target, List<MyClass> assign, int i) 
{ 
    i++; 
    target.ID = assign[i].ID; 
    target.MyVar = assign[i].MyVar; 
} 

將在第一替換值MyClass的實例與您在第i個實例中的實例List<MyClass>

雖然這很難說,但這並不明顯,您要在這裏實現的目標並不明顯。看起來沒有任何理由不使用新參數重新實例化對象。

+0

我的GUI被綁定到字段。我第一次初始化類時,我現在用LINQ數據填充它,我想將第一個成員(索引0)設置爲該字段。後來我想運行「Assign」並增加索引1並將這些值設置到我的字段中,然後它們反映在我的Bound GUI元素中。 – evilsushi

+0

我理解這些單詞,但我仍然不知道你實際上想要做什麼或爲什麼。您需要提供更多關於如何使用您擁有的代碼以及最終要做什麼的內容。 – PhonicUK

0

我猜你要初始化編號:

public static List<MyClass> Assign (List<MyClass> assign, int i) 
{   
    for(int j=0;j<assign.Count;j++){ 
     assign[j].ID = i; 
     i++ 
    } 
} 
+1

這看起來不像原來的行爲 –

+0

@evilsushi說他想增加索引,所以...但我同意你和你+1,我們遠離原來的代碼! – Thomas

+1

這是一個猜謎遊戲-OP的請求有些「vage」:) –

0
public static List<MyClass> myClassList = new List<MyClass>(); 

public static List<MyClass> Assign (List<MyQuiz> assign, int i) 
{ 
    myClassList.Add(new MyClass(assign[i].ID, assign[i].MyVar)); 
    return myClassList; 
} 

根據您的問題,這是你在找什麼。創建MyClass的新實例,將其添加到列表中,並根據i分配字段值。

編輯:添加一個MyClass的公共靜態列表給你的班級。這應該將該項目添加到類中的新靜態列表並返回列表。目前還不清楚,因爲問題中有兩個類名,並且似乎是代碼中的一些類型問題。

+0

assign不是一個空列表,因爲它是用'myClass = MyClass.Query(「data.xml」)初始化的;'' – Thomas

+0

我所有的錯誤消失了,但沒有數據似乎到達那裏。 – evilsushi

+0

@Thomas分配不需要是一個空列表。但是這段代碼會將重複條目添加到列表中。 – Chris

相關問題