C#对象数组

时间:2009-11-13 19:06:22

标签: c# asp.net

我使用了两个类“地址”和“请求”的Web服务。请求对象的一个​​属性是地址对象数组:

request _req = new request();
_req.addresses = // expecting address[]

我知道我做错了(因为我不断出现异常错误),所以我希望有人可以帮助我。如何创建地址对象数组并将“_req.addresses”值设置为等于该对象(address [])?当我试图将城市值设置为等于字符串_q.LocationA.City时,我在第二行得到“对象引用没有设置为实例...”错误...所以这些都不起作用:

    address[] _address = new address[1];
    _address[0].city = _q.LocationA.City;
    _address[0].state = _q.LocationA.State;
    _address[0].street = _q.LocationA.Address;
    _address[0].zipCode = _q.LocationA.Zip;

    request _req = new request();
    _req.addresses = _address;

我试过这个:

    address _address = new address();
    _address.city = _q.LocationA.City;
    _address.state = _q.LocationA.State;
    _address.street = _q.LocationA.Address;
    _address.zipCode = _q.LocationA.Zip;

    request _req = new request();
    _req.addresses[0] = _address;

5 个答案:

答案 0 :(得分:9)

您的类需要与数组分开实例化。 C#不会自动调用您的构造函数,因此这就是您在第一组代码中获得NullPointerException的原因。第二个代码失败,因为你给它一个对象,而不是一个数组。

你基本上需要将两者结合起来:

address[] _address = new address[1];
_address[0] = new address();
_address[0].city = _q.LocationA.City;
_address[0].state = _q.LocationA.State;
_address[0].street = _q.LocationA.Address;
_address[0].zipCode = _q.LocationA.Zip;

request _req = new request();
_req.addresses = _address;

答案 1 :(得分:2)

在第一个代码块中,您没有在数组的第一个元素中创建新的address对象;因此,当您尝试设置城市成员时,空引用异常。解决这个问题的方法是:

address[] _a = new address[1];
_a[0] = new address();
_a[0].city = ...

在第二个代码块中,您没有在_req.addresses成员中创建数组。解决方法是:

...
_req.addresses = new address[1];
_req.addresses[0] = _address;

希望这有帮助!

答案 2 :(得分:1)

变化:

address[] _address = new address[1];
    _address[0].city = _q.LocationA.City;
    _address[0].state = _q.LocationA.State;
    _address[0].street = _q.LocationA.Address;
    _address[0].zipCode = _q.LocationA.Zip;

要:

address[] _address = new address[1];
_address[0] = new address();
_address[0].city = _q.LocationA.City;
_address[0].state = _q.LocationA.State;
_address[0].street = _q.LocationA.Address;
_address[0].zipCode = _q.LocationA.Zip;

答案 3 :(得分:0)

我建议你使用通用列表:

List<address> _addresses = new List<address>();
_addresses.Add(_address);

request _req = new request();    
_req.addresses = _addresses;

答案 4 :(得分:0)

使用System; 使用System.Collections.Generic; 使用System.Linq; 使用System.Text;

命名空间ConsoleApplication1 {     公共类地址     {         公共街道街;         公共字符串城市;         公共字符串状态;         public string ZipCode;     }

public class Request
{
   public Address[] address;
}


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

        Address[] address = new Address[]{ new Address {
                    Street = "140 sw 8 st",
                    City = "Miami",
                    State = "Florida",
                    ZipCode = "33122"}};

        Request req = new Request();

        req.address = address;

    }
}

}