I personally would first make a class, then use a list.
public class PortProperties {
public String Address { get; set; }
public long Port { get; set; }
}
Then initialize the list:
var propertiesOfPorts = new List<PortProperties>();
Then add it:
propertiesOfPorts.add( new PortProperties {
Address = "12.2.2.2",
Port = 80
});
Then use it:
PortProperties firstPort = propertiesOfPorts[0];
String address = firstPort.Address;
long port = firstPort.Port
Using this method, it is easy to define exactly what you want. Otherwise 2D arrays, or 3D arrays get really confusing. For example, maybe for each of those ports I need to define another list of other such information related to that particular port (therefore making this a potential 3D array), I'd just include a list object in the PortProperties class, simple and easy to understand.
public class PortProperties {
public String Address { get; set; }
public long Port { get; set; }
public List<String> otherPropList { get; set; }
}