为什么仅使用常量的 class 实例化不起作用?

Why does a class instantiation using only constants not work?

我正在创建一个类型为 class 的对象,并仅使用常量值对其进行实例化,但它一直失败。我在另一个文件中有 class,带有 public subclasses。我正在访问那些 subclasses,通过使用 class 名称,然后是类型,因为我对它的实例化没有 subclasses。然后它告诉我该行有空引用错误。我最初使用的是动态值,但由于失败,我用常量代替了它们。

这是我的代码。

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 } }
}