C#从函数获取返回列表字符串

时间:2019-02-15 03:52:17

标签: c#

我在从函数返回列表时遇到问题,我尝试给出一个变量以从函数获取返回列表,我得到如下返回:

  

System.Collections.Generic.List`1 [System.String]

以下是我执行的代码:

我想获取返回列表,该字符串将从函数中拆分为长度64,它将在列表中有两个字符串,该字符串将被扩展,下面的代码只是我设置的示例字符串。

主要功能:

static void Main(string[] args)
{
  string test="DD1234455667788999663234324324345434543542252E323431431414313414DD1234455667788999663234324324345434543542252E323431431414313414";
  var test = toHexString(datass);
}

返回功能:

 public static string toHexString(byte[] hexArray)
    {
        string hexString = "";
        List<string> hexlist = new List<string>();

        foreach (byte b in hexArray)
        {
            hexString += string.Format("{0:X2}", b);

            if (hexString.Length > 0 && (hexString.Length % 64) == 0)
            {
                hexlist.Add(hexString);
                hexString = string.Empty;
            }

        }
        return  hexlist.ToString();
    }

3 个答案:

答案 0 :(得分:0)

更改列表的方法将解决退货问题

static void Main(string[] args)
{
  string test="DD1234455667788999663234324324345434543542252E323431431414313414DD1234455667788999663234324324345434543542252E323431431414313414";
  var test = toHexString(datass);
}




public static List<string> toHexString(byte[] hexArray)
    {
        string hexString = "";
        List<string> hexlist = new List<string>();

        foreach (byte b in hexArray)
        {
            hexString += string.Format("{0:X2}", b);

            if (hexString.Length > 0 && (hexString.Length % 64) == 0)
            {
                hexlist.Add(hexString);
                hexString = string.Empty;
            }

        }
        return  hexlist.ToString();
    }

答案 1 :(得分:0)

首先,在您的if循环内,您访问了test.Add(hexString);(根据此代码无法访问),我相信您尝试的是hexlist.Add(hexString);

第二,hexlist.ToString()将始终返回System.Collections.Generic.List1[System.String],因为ToString无法将列表直接转换为字符串,并且返回对象的类型。

您可以使用foreachstringBuilderstring.Join()

答案 2 :(得分:0)

问题是,当您在没有显式覆盖str_replace_all(vec, "\n|\t", " ")的对象或类上调用ToString()时,它将返回其类型名称`

ToString()

由于return hexlist.ToString(); hexlist,因此您得到的明显结果是

List<T>

您可以使用System.Collections.Generic.List`1[System.String] 之类的内容,也可以使用string.Concat之类的内容来返回所需的结果。例如

string.Join

或者如果您想要一种懒惰的样式 Linq Enumerable 解决方案。您可以使用这样的扩展方法来返回可枚举的数组块

return string.Concat(hexlist);
// or
return string.Join("",hexlist);

然后您可以编写这样的方法

// returns enumerable chunks of size, and ignores any partial result
public static IEnumerable<IEnumerable<T>> GetChunks<T>(this T[] source, int size)
{
   for (var i = 0; i < source.Length; i += size)
      yield return source.Skip(i).Take(size);
}

用法

public static string GetHex(byte[] bytes, int size)
   => string.Concat(bytes.GetChunks(size).Select(x => $"{x:X2}"));

此方法的结果返回一个十六进制字符串,由32个字节的校验块组合而成