我声明了一个嵌套类,我试图用一个点访问下面的多个内部成员。对于多个内部类,最简单的方法是什么? 这是在我复制JSON数据并运行选择性粘贴->将JSON粘贴为类时发生的。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace WeatherTest.Models
{
public class OpenWeatherResponse
{
public class Coord
{
public float lon { get; set; }
public float lat { get; set; }
}
public class Main
{
public float temp { get; set; }
public int pressure { get; set; }
public int humidity { get; set; }
public float temp_min { get; set; }
public float temp_max { get; set; }
}
}
}
在程序的另一部分,出现错误: OpenWeatherResponse.Main”不包含“临时”的定义
OpenWeatherResponse rawWeather = new OpenWeatherResponse();
Temp = rawWeather.Main.temp,
答案 0 :(得分:2)
在您的示例中,Main
是一种类型,而不是对象的实例。但是,您正在尝试访问实例成员。
您可以执行以下两项操作之一:
选项A。不要在Main中使用实例成员。使用静态成员。
public class OpenWeatherResponse
{
public class Main
{
static public float temp { get; set; }
static public int pressure { get; set; }
static public int humidity { get; set; }
static public float temp_min { get; set; }
static public float temp_max { get; set; }
}
}
选项B。创建一个属性,该属性将保存一个Main
的实例,并使用该实例。为了避免符号歧义,我将类重命名为MainClass
,并公开了名为Main
的属性:
public class OpenWeatherResponse
{
public class MainClass
{
public float temp { get; set; }
public int pressure { get; set; }
public int humidity { get; set; }
public float temp_min { get; set; }
public float temp_max { get; set; }
}
public MainClass Main { get; set; } = new MainClass();
}
这些解决方案中的任何一个都将允许此代码按原样工作:
OpenWeatherResponse rawWeather = new OpenWeatherResponse();
Temp = rawWeather.Main.temp,
答案 1 :(得分:2)
简而言之,除非您的类是static
(根据昨天使用序列化的问题,请不要在此处使用static),否则您将无法按预期访问它们。
原因是,尽管您有嵌套的类,但是实例之间没有关系:
public class A
{
public class B
{
}
}
B存在,但未被引用为A的成员。
相反,您需要将B引用为A的属性:
public class A
{
public B B { get; set; }
}
public class B
{
public string C {get;set;}
}
我已经取消了对类的嵌套,因为这并不是必须的。当然,您仍然可以这样做。
现在,当您创建A的实例时,就可以访问B:
var val = new A();
val.B = new B();
val.B.C = "hello";
因此,要修复您的代码,可以将其更改为:
public class OpenWeatherResponse
{
public Coord Coord { get; set; }
public Main Main { get; set; }
}
public class Coord
{
public float lon { get; set; }
public float lat { get; set; }
}
public class Main
{
public float temp { get; set; }
public int pressure { get; set; }
public int humidity { get; set; }
public float temp_min { get; set; }
public float temp_max { get; set; }
}
对不起,我对此的解释不太好。希望你明白我的意思:-)