如何获取System.String对象的值而不是返回“System.String []”

时间:2011-08-23 13:22:19

标签: c# parsing

我正在处理一个文件解析器,而这段代码并没有给我我想要的东西。在我走得更远之前,我应该提一下我没有编写这个程序,我只是编辑源代码来修复这个特定的问题。此外,我可以编译代码,因此这不是一个问题(你知道下载的程序如何总是有编译错误)。这是代码。

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[]作为值,我想要System.String对象的值。如果你能理解这一点并告诉我出了什么问题,我们将不胜感激。

程序名称为ESF Editor 1.4.8.0。

6 个答案:

答案 0 :(得分:4)

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;
}

答案 1 :(得分:1)

您的问题是strings不是单个字符串,而是一个字符串数组。因此,您对ToString的调用是调用Object.ToString(),后者返回对象的类型。

也许你想要像

这样的东西
esfValue.Value = strings.Aggregate((acc, next) => acc + next)

将简单地将所有字符串连接在一起。

答案 2 :(得分:0)

strings变量是一个字符串数组 - Array类不会覆盖返回对象类型的默认ToString()实现。

您需要连接数组中的所有字符串 - 循环和连接或使用LINQ并将结果字符串分配给esfValue.Value。当然,这假设您希望将值全部放在一个字符串中,一个接一个。

答案 3 :(得分:0)

试试这个

esfValue.Value = string.Join("", strings);

答案 4 :(得分:0)

我认为你只需要加入字符串数组中包含的字符串值。为此,您需要调用String.Join并传递字符串分隔符和字符串数组。它返回一个System.String。

答案 5 :(得分:0)

当你对一个没有覆盖.ToString()基类方法的类执行.ToString()以返回自定义字符串(string[]没有)时,你总会得到作为结果的类型的命名空间/类。

数组本身没有值。你想要获得什么价值?您是否尝试将数组加入单个字符分隔的字符串中?如果是这样,这将有效:

esfValue.Value = string.Join(",", strings);

只需将,替换为您要用数据分隔的任何字符。