如何获得一个系统的价值.字符串对象,而不是返回"System.String[]"
本文关键字:quot 返回 System String 对象 何获得 一个 系统 字符串 | 更新日期: 2023-09-27 18:06:37
我正在做一个文件解析器,这段代码并没有给我想要的东西。在我进一步讨论之前,我应该提到我没有写这个程序,我只是编辑源代码来解决这个特定的问题。此外,我可以编译代码,所以这不是一个问题(您知道下载的程序总是有编译错误)。代码如下:
case EsfValueType.Binary4E: //System.String[]
{
int size = (int)(this.reader.ReadUInt32() - ((uint)this.reader.BaseStream.Position));
var strings = new string[size / 4];
for (int i = 0; i < size / 4; i++)
strings[i] = this.stringValuesUTF16[this.reader.ReadUInt32()];
esfValue.Value = strings.ToString();
break;
}
现在,我将.ToString();
部分添加到上面的行中,但没有变化。问题是esfValue。Value最终以System.String[]
作为它的值,我想要系统的值。字符串对象。如果你能弄明白这是怎么回事,告诉我出了什么问题,我将不胜感激。
程序名称为ESF Editor 1.4.8.0
case EsfValueType.Binary4E: //System.String[]
{
int size = (int)(this.reader.ReadUInt32() - ((uint)this.reader.BaseStream.Position));
var strings = new StringBuilder();
for (int i = 0; i < size / 4; i++)
{
strings.Append(this.stringValuesUTF16[this.reader.ReadUInt32()]); //or AppendLine, depending on what you need
}
esfValue.Value = strings.ToString();
break;
}
strings
变量是一个字符串数组- Array
类不覆盖默认的ToString()
实现,它返回对象的类型。
您需要连接数组中的所有字符串——要么循环并连接,要么使用LINQ并将结果字符串赋值给esfValue.Value
。当然,这假设您希望所有的值都在一个字符串中,一个接一个。
你的问题是,strings
不是一个单一的字符串,它的字符串数组。因此,对ToString
的调用调用了Object.ToString()
,后者返回对象的类型。
也许你想要像
esfValue.Value = strings.Aggregate((acc, next) => acc + next)
,它将简单地将所有字符串连接在一起。
当你在一个没有覆盖。tostring()基方法的类上执行。tostring()来返回一个自定义字符串(string[]
没有)时,你总是会得到类型的名称空间/类作为结果。
数组本身没有值。你想要得到什么价值?您是否试图将数组连接到单个字符分隔的字符串中?如果是这样,这将工作:
esfValue.Value = string.Join(",", strings);
只需将,
替换为您想用的任何字符来分隔数组。
我认为你只需要连接字符串数组中包含的字符串值。为了做到这一点,你需要调用String。连接并传递字符串分隔符和字符串数组。它返回一个System.String