C#有一种方法可以使用类似构造函数的方法

时间:2013-05-16 13:07:41

标签: c# xml

我是新手,所以如果这是一个愚蠢的问题,我道歉。我已将界面绑定到我构建的类的字段。我将类作为类型T的列表启动,现在我正在尝试将字段的赋值增加到列表的索引。

我的代码看起来像这样。 我的班级:

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>

一切正常,除了Assign方法,有什么建议吗?

4 个答案:

答案 0 :(得分:0)

如果您的类型具有状态,最好在使用之前创建此类的实例。 只需从方法中删除静态关键字,然后使用以下代码:

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

答案 1 :(得分: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的第一个实例中的值替换为List<MyClass>

的第i个实例中的值

有点难以辨别,因为你在这里想要实现的目标并不明显。看起来没有任何理由不用新参数重新实例化对象。

答案 2 :(得分:0)

我想你想初始化Id:

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

答案 3 :(得分: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的公共静态列表。这应该将项添加到类中的新静态列表并返回列表。目前还不清楚,因为问题中有两个类名,似乎是代码中的某些类型问题。