2012-09-29 3 views
-1

왜 이런 일이 일어나는 지 이해할 수 없습니다. 코드 및 출력 예를 참조하십시오. 3 개의 배열 요소가 명확하게 다른 값으로 설정 될 때 같은 값을 출력하는 이유는 무엇입니까?XSD에서 자동 생성 된 클래스는 배열에서 같은 값을 모두 반환합니까?


프랭크
제임스

제임스
제임스
제임스는

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; 
    } 
    } 
} 

답변

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(); 
    } 
} 

동일한 세 번 사용하는 대신 배열의 각 색인에 대해 새 개체를 만듭니다.

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; 
+0

그래서 AllUsers.user [0] = userConfig; allUsers를 userConfig에 저장된 값으로 설정하지 않고 userConfig를 가리 킵니까? – CathalMF

+0

allUsers.user [0] = userConfig는 사용자가 * last *에 지정한 값을 가리 킵니다. 내가 말한 것처럼 할당하려는 모든 사용자 이름에 대해 새 usersUser()를 만들어야합니다. – Thousand

+0

빙고 감사. 나는 그것이 값을 가리키는 방식을 오해하고있었습니다. – CathalMF

관련 문제