这是我的班级声明
public class PlacesAPIResponse
{
public string formatted_address { get; set; }
public Geometry geometry { get; set; }
public Location location { get; set; }
public string icon { get; set; }
public Guid id { get; set; }
public string name { get; set; }
public string reference { get; set; }
public string[] types { get; set; }
}
public class Geometry
{
Location location { get; set; }
}
public class Location
{
public double lat { get; set; }
public double lon { get; set; }
}
当我尝试像这样访问它时,但是由于保护级别而导致“无法访问”
PlacesAPIResponse response = new PlacesAPIResponse();
string lon = response.geometry.location.lon;
我可能做错了什么?
答案 0 :(得分:4)
您需要将Geometry.location
字段声明为公开字段:
public class Geometry
{
public Location location;
}
默认情况下,如果没有为类成员显式声明访问修饰符,则假定它的可访问性为private
。
来自C#规范部分10.2.3 Access Modifiers:
当class-member-declaration不包含任何访问修饰符时, 假设是私人的。
顺便说一句,您也可以考虑将其作为财产(除非它是mutable struct)
编辑:此外,即使您解决了访问问题,Location.lon
也会被声明为double
,但您隐式将其分配给string
。您还需要将其转换为字符串:
string lon = response.geometry.location.lon.ToString();
答案 1 :(得分:0)
location
的{{1}}属性未指定辅助功能级别。默认级别为Geometry
。
答案 2 :(得分:0)
Geometry.location
没有访问修饰符,因此默认情况下它是私有的
答案 3 :(得分:0)
将位置设为公开。它默认是私有的。
public class Geometry
{
public Location location;
}
你可以访问lon as double
PlacesAPIResponse response = new PlacesAPIResponse();
double lon = response.geometry.location.lon;