gpt4 book ai didi

c# - 属性私有(private)集崩溃统一

转载 作者:太空宇宙 更新时间:2023-11-03 18:21:44 25 4
gpt4 key购买 nike

我有一个自定义类,可以从网络获取一些数据。
当我得到这些数据时,我想将它设置为一个属性的值,但是当我这样做时,这个统一崩溃了。注释行在没有此行的情况下生成崩溃,一切正常。请参阅下面的代码:

using System;
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;

public class GetDB
{
private readonly Main m;
private readonly string Url;

public string DBData {
get
{
if(DBData == null)
return null;
else
return DBData;
}
private set
{
DBData = value;
}
}

public GetDB(Main m, string url)
{
this.m = m;
this.Url = url;
}

public void GetServerData(){
m.StartCoroutine(GetText(Url, (result) =>{
this.DBData = result; //THIS LINE CRASHES UNITY
Debug.Log(result);
}));
}

IEnumerator GetText(string url, Action<string> result) {
UnityWebRequest www = UnityWebRequest.Get(url);
yield return www.SendWebRequest();

if(www.isNetworkError || www.isHttpError) {
Debug.Log(www.error);
}
else {
if (result != null)
result(www.downloadHandler.text);
}
}
}

我该如何解决这个问题,这里到底发生了什么?

如果有任何不清楚的地方,请告诉我,以便我澄清。

最佳答案

您必须为该属性使用支持字段:

string _dbData;

public string DBData
{
get
{
if(_dbData == null)
return null;
else
return _dbData;
}
private set
{
_dbData= value;
}
}

属性只是 getter 和 setter 方法的语法糖。所以你可以像这样重写你的属性:

public string GetDBData()
{
if(_dbData == null)
return null;
else
return _dbData;
}

public void SetDBData(string value)
{
_dbData = value;
}

您实现属性的方式:

public void SetDBData(string value)
{
// you will never get out of here
SetDBData(value);
}

关于c# - 属性私有(private)集崩溃统一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51321022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com