我正在创建一个类型为类的对象,并仅使用常量值实例化它,但它一直失败。我有类在另一个文件,与公共子类。我访问那些子类,通过使用类名,然后是类型,因为它的实例化,没有子类。然后它告诉我在那一行有一个空引用错误。我最初使用的是动态值,但由于失败,我用常量代替了它们。
我的代码在这里。
Requests.cs
public class Requests
{
// Start is called before the first frame update
public class PostData{
public Dictionary<string, Time> fields;
}
public class Time{
public double doubleValue;
}
}
Main.cs
public void SaveButtonClicked()
{
requestLib = new Requests();
}
private IEnumerator SaveData()
{
Requests.PostData postData = new Requests.PostData {fields = {{"Richard", new Requests.Time{doubleValue = 6.44}}}};
var request = requestLib.CreateRequest($"https://firestore.googleapis.com/v1/projects/xxx/databases/(default)/documents/levels/{FinishScreen.level}", Requests.RequestType.PATCH, postData);
Debug.Log("hi");
yield return request.SendWebRequest();
}
错误在这一行Requests.PostData postData = new Requests.PostData {fields = {{"Richard", new Requests.Time{doubleValue = 6.44}}}};
所有的值都是硬编码的,但我仍然得到NullReferenceException: Object reference not set to an instance of an object
。
对不起,我是c#新手,所以我找不到出现错误的原因。
当你为fields
调用对象初始化器时,你并没有实例化一个新对象:
fields = {{"Richard", new Requests.Time{doubleValue = 6.44}}}
这是试图调用方法Add(string, Time)
,但这样做是针对空引用。
你需要这样做:
fields = new Dictionary<string, Requests.Time>
{
{ "Richard", new Requests.Time { doubleValue = 6.44 } }
}