无法从自定义Scoreboard类打印foreach循环值,输出为空字符串
问题分析与解决方案
我来帮你看看这个Unity开发里的问题!你的代码里有几个关键逻辑错误,导致最后输出的realData是空字符串,咱们一步步拆解:
核心问题点
- foreach循环的赋值逻辑错误:你在
MakeBR方法里的foreach循环中,每次都把realData直接赋值为当前的newData,这意味着循环结束后,realData只会保留数组的最后一个元素。而你的BigRD最后拼接了一个额外的逗号,用Split(',')拆分后,最后一个元素是空字符串,所以最终realData就成了空。 - 字符串拼接的冗余逗号:你在循环里给
BigRD追加strData[i]后又加了逗号,导致最终的字符串末尾多了一个逗号,拆分后必然会产生一个空元素。 - 未处理原始字符串的空格:你的
strData里的元素是"P ,B ,B ..."这种带空格的格式,拆分后每个项都会带空格,可能不是你想要的结果。
修正后的代码
CustomClass.cs
public string[,] tableBR; // 先去掉原始字符串里的空格,避免后续处理麻烦 string[] strData = {"P,B,B,P,B,B,B,B,B,B,P,P,B,P"}; public int X_LENGTH = 104; public int Y_LENGTH = 15; #region BR VARIABLES string BigRD = ""; string[] newBigRD; // 初始化realData避免空引用 string realData = ""; #endregion public Scoreboard(){ tableBR = new string[X_LENGTH,Y_LENGTH]; } public void MakeBR(string data){ BigRD = data; // 拼接strData里的所有元素,用逗号分隔(避免末尾多逗号) foreach(string item in strData){ if(!string.IsNullOrEmpty(BigRD)){ BigRD += ","; } BigRD += item; } // 拆分字符串 newBigRD = BigRD.Split(','); // 拼接所有非空的项到realData(如果需要保留所有数据) realData = ""; foreach(string newData in newBigRD){ // 跳过空项,同时Trim掉可能的空格 string trimmedData = newData.Trim(); if(!string.IsNullOrEmpty(trimmedData)){ if(!string.IsNullOrEmpty(realData)){ realData += ", "; } realData += trimmedData; } } } public string ShowBigRD(){ return realData; } public override string ToString(){ return "this are all the data :" + realData; }
MainClass.cs
string BigRD = ""; void Start(){ StartCoroutine(Win_Log()); } IEnumerator Win_Log(){ Scoreboard scoreBoard = new Scoreboard(); scoreBoard.MakeBR(BigRD); Debug.Log("This is the data : " + scoreBoard.ShowBigRD()); Debug.Log(scoreBoard.ToString()); yield return new WaitForEndOfFrame(); }
关键改动说明
- 修正foreach赋值逻辑:把
realData = newData改成拼接逻辑,同时过滤空项和多余空格,确保最终的realData是所有有效数据的组合。 - 优化字符串拼接:避免在循环末尾添加多余的逗号,改用判断逻辑来添加分隔符,减少空元素的产生。
- 处理原始字符串空格:提前把
strData里的空格去掉,或者在拆分后用Trim()清理,保证数据整洁。 - 初始化变量:给
realData初始化为空字符串,避免潜在的空引用问题。
现在运行代码,你应该能看到完整的有效数据输出了!
内容的提问来源于stack exchange,提问作者user9871139
相关产品推荐
相关产品推荐

