我正在处理一个文件解析器,而这段代码并没有给我我想要的东西。在我走得更远之前,我应该提一下我没有编写这个程序,我只是编辑源代码来修复这个特定的问题。此外,我可以编译代码,因此这不是一个问题(你知道下载的程序如何总是有编译错误)。这是代码。
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。
答案 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);
只需将,
替换为您要用数据分隔的任何字符。