为什么仅使用常量的 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 } }
}
我正在创建一个类型为 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 } }
}