从XSD生成的类自动从数组返回所有相同的值?

时间:2012-09-29 17:58:37

标签: c# object xsd

我无法理解为什么会发生以下情况。 请参阅代码和输出示例。 为什么3个数组元素在明确设置为不同值时输出相同的值。

吉姆 弗兰克 詹姆斯

詹姆斯 詹姆斯 詹姆斯

class Program
{
    static void Main(string[] args)
    {

        users allUsers = new users();
        allUsers.user = new usersUser[3];
        usersUser userConfig = new usersUser();

        userConfig.username = "Jim";
        allUsers.user[0] = userConfig;
        Console.WriteLine(allUsers.user[0].username);

        userConfig.username = "Frank";
        allUsers.user[1] = userConfig;
        Console.WriteLine(allUsers.user[1].username);

        userConfig.username = "James";
        allUsers.user[2] = userConfig;
        Console.WriteLine(allUsers.user[2].username);

        Console.WriteLine("");

        Console.WriteLine(allUsers.user[0].username);
        Console.WriteLine(allUsers.user[1].username);
        Console.WriteLine(allUsers.user[2].username);

        Console.ReadLine();
    }
}


using System.Xml.Serialization;


/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.1432")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public partial class users {

    private usersUser[] userField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("user")]
    public usersUser[] user {
    get {
        return this.userField;
    }
    set {
        this.userField = value;
    }
    }
}

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.1432")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
public partial class usersUser {

    private string usernameField;

    /// <remarks/>
    public string username {
    get {
        return this.usernameField;
    }
    set {
        this.usernameField = value;
    }
    }
}

2 个答案:

答案 0 :(得分:0)

 usersUser userConfig = new usersUser();

你只宣告一次。然后,您只需使用其他值覆盖userConfig.username字段。试试这样:

usersUser userConfig = new usersUser(); // <-- new instance
userConfig.username = "Jim";
allUsers.user[0] = userConfig;


usersUser userConfig1 = new usersUser(); // <-- another new instance
userConfig1.username = "Jim";
allUsers.user[0] = userConfig1;

答案 1 :(得分:0)

因为您在分配之前反复更改同一个对象,因此即使对于已分配的对象,您也要更改它,您设置的最后一个名称是粘贴的名称。你必须这样做:

class Program
{
    static void Main(string[] args)
    {

        users allUsers = new users();
        allUsers.user = new usersUser[3];
        usersUser userConfig = new usersUser();

        userConfig.username = "Jim";
        allUsers.user[0] = userConfig;
        Console.WriteLine(allUsers.user[0].username);

        userConfig = new usersUser();
        userConfig.username = "Frank";
        allUsers.user[1] = userConfig;
        Console.WriteLine(allUsers.user[1].username);

        userConfig = new usersUser();
        userConfig.username = "James";
        allUsers.user[2] = userConfig;
        Console.WriteLine(allUsers.user[2].username);

        Console.WriteLine("");

        Console.WriteLine(allUsers.user[0].username);
        Console.WriteLine(allUsers.user[1].username);
        Console.WriteLine(allUsers.user[2].username);

        Console.ReadLine();
    }
}

为数组中的每个索引创建新对象,而不是使用相同的三次。