2013-10-24 7 views
0

У меня объект с именем данных, который принадлежит к классу,Как получить доступ к объекту в C#?

[DataContract] 
public class names 
{ 
    [DataMember(Name = "code")] 
    public int Code { get; set; } 

    [DataMember(Name = "message")] 
    public string Message { get; set; } 

    [DataMember(Name = "values")] 
    public values values{ get; set; } 
} 

где значения является еще один класс с переменными его собственной, изначально при выполнении следующего кода,

names data= new names(); 
data.values.Name = ""; 

Я получаю исключение null при выполнении второй строки.

В чем проблема? Почему data.values.Name еще пустой, даже после выполнения

names data= new names(); 

, что я должен сделать, чтобы дать ему какое-то значение?

+22

Боже мой, не называйте свой класс 'object'! –

+1

вызов класса объекта - плохая идея. Это очень легко путать с типом [object] (http://msdn.microsoft.com/en-us/library/vstudio/9kkx3h3c.aspx) – Liam

+0

'public values ​​values' - это то, что вы хотите? что такое ценности? – Jonesopolis

ответ

8

Инициализировать значения.

names data= new names(); 
data.values = new values(); 
3

Помимо не называя свой класс object, который просто напрашивается на неприятности. Вы не можете получить доступ к свойствам на values, потому что вы никогда не инициализировали его. Для вашего класса нужен конструктор, где values настроен на что-то. Или вам нужно что-то задавать перед тем, как попробовать и получить к нему доступ.

Так как это:

[DataContract] 
public class object 
{ 
    [DataMember(Name = "code")] 
    public int Code { get; set; } 

    [DataMember(Name = "message")] 
    public string Message { get; set; } 

    [DataMember(Name = "values")] 
    public values values{ get; set; } 

    public object() 
    { 
     values = new values(); 
    } 
} 

Или вы могли бы сделать:

object data= new object(); 
data.values = new values(); 
data.values.Name = ""; 

Без контекста это трудно сказать, что вам подходит лучше.

0

принимает ваш класс:

[DataContract] 
//I've renamed it to stop it hurting my eyes. 
public class myClass 
{ 
    [DataMember(Name = "code")] 
    public int Code { get; set; } 

    [DataMember(Name = "message")] 
    public string Message { get; set; } 

    [DataMember(Name = "values")] 
    public values values{ get; set; } 
} 

Если вы изменяете

myClass data= new myClass(); 
data.values.Name = ""; 

к:

myClass data= new myClass(); 
data.values = new values(); 
data.values.Name = ""; 

это теперь будет работать.

, предполагающий:

public class values 
{ 
    //empty constructor?? 
    public values() 
    { 

    } 
    public string Name { get; set; } 
} 
1

Хорошо, я стат угадать имя object только плохой выбор имени для иллюстрации вашей проблемы (как и другие сказали, вы не хотите, чтобы выбрать это имя (если допускается)

проблема вы столкнулись в том, что значения свойств не инициализирован, что дает вам исключение Вот пример того, что вы можете сделать, чтобы избежать этого:..

public class MyObject 
{ 
    public MyObject() 
    { 
     this.Values = new Values(); 
    } 

    public int Code { get; set; } 
    public string Message { get; set; } 
    public Values Values { get; set; } 
} 

public class Values 
{ 
    public string Name { get; set; } 
} 

Как вы можете видеть, я инициализирую свойство Values ​​в конструкторе объекта yout.

Смежные вопросы