我在从函数返回列表时遇到问题,我尝试给出一个变量以从函数获取返回列表,我得到如下返回:
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();
}
答案 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无法将列表直接转换为字符串,并且返回对象的类型。
您可以使用foreach
或stringBuilder
或string.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个字节的校验块组合而成