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

C# 如何获取System.String对象的值而不是返回;System.String[]”;,c#,parsing,C#,Parsing,我正在做一个文件解析器,而这段代码并没有给出我想要的东西。在我继续之前,我应该提到我没有写这个程序,我只是编辑源代码来解决这个特定的问题。另外,我可以编译代码,所以这不是问题(你知道下载的程序总是有编译错误)。这是密码 case EsfValueType.Binary4E: //System.String[] { int size = (int)(this.reader.ReadUInt32() - ((uint)this.reader.BaseStream.Position));

我正在做一个文件解析器,而这段代码并没有给出我想要的东西。在我继续之前,我应该提到我没有写这个程序,我只是编辑源代码来解决这个特定的问题。另外,我可以编译代码,所以这不是问题(你知道下载的程序总是有编译错误)。这是密码

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;
}
case-EsfValueType.Binary4E://System.String[]
{
int size=(int)(this.reader.ReadUInt32()-((uint)this.reader.BaseStream.Position));
变量字符串=新字符串[大小/4];
对于(int i=0;i
现在,我添加了
.ToString()部分到上面的行,但没有区别。问题是esfValue.Value的值以
System.String[]
作为其值结束,我需要System.String对象的值。如果你能理解这一点,并告诉我出了什么问题,我们将不胜感激


程序名为ESF Editor 1.4.8.0。

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


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

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


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

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

也许你想要像这样的东西

esfValue.Value = strings.Aggregate((acc, next) => acc + next)

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

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

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;
}
也许你想要像这样的东西

esfValue.Value = strings.Aggregate((acc, next) => acc + next)
将所有字符串连接在一起。

case-EsfValueType.Binary4E://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;
}
{ int size=(int)(this.reader.ReadUInt32()-((uint)this.reader.BaseStream.Position)); var strings=新的StringBuilder(); 对于(int i=0;i
case-EsfValueType.Binary4E://System.String[]
{
int size=(int)(this.reader.ReadUInt32()-((uint)this.reader.BaseStream.Position));
var strings=新的StringBuilder();
对于(int i=0;i
我认为您只需要加入字符串数组中包含的字符串值。为此,需要调用String.Join并传递字符串分隔符和字符串数组。它返回一个System.String。

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

当您对一个类执行.ToString()操作时,如果该类没有重写.ToString()基方法以返回一个自定义字符串(而
String[]
没有),您总是会得到该类型的命名空间/类作为结果

数组本身没有值。你想得到什么价值?是否尝试将数组合并到单个字符分隔的字符串中?如果是这样,这将起作用:

esfValue.Value = string.Join(",", strings);
只要将
替换为您想要用以分隔数组的任何字符。

当您对一个不重写.ToString()基方法的类执行.ToString()操作以返回一个自定义字符串(而
string[]
没有)时,您总是会得到该类型的命名空间/类作为结果

数组本身没有值。你想得到什么价值?是否尝试将数组合并到单个字符分隔的字符串中?如果是这样,这将起作用:

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

只需将
替换为要用以分隔数组的任何字符。

您说的是“System.String对象的值”-哪一个?共有
size/4个
。从根本上说,您正在读取多个字符串-我们不知道您是否希望一个字符串包含所有字符串中的数据(以某种方式分离?只是混合在一起?)或者只是其中的一个值……你可能想考虑改写使用<代码> StringBuilder < /代码> @罗兰:我看不到<代码> StringBuilder <代码>会有什么帮助,直到我们知道最终结果意味着什么。我知道,是的,现在我想要所有的值。你说“系统的值。String Objor”-哪一个?共有
size/4个
。从根本上说,你正在读几个字符串——我们不知道你是否想要一个包含所有这些数据的字符串(以某种方式分开?只是一起拼凑?)或者仅仅是其中的一个值……你可能想考虑改写来使用<代码> StringBuilder < /代码> @罗兰:我看不出一个<代码>是怎么写的。