如何获得一个系统的价值.字符串对象,而不是返回"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

如何获得一个系统的价值.字符串对象,而不是返回"System.String[]"

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

相关文章: