[英]Strange behavior of string.Join on byte array and startIndex, count
我正在使用string.Join來顯示數組包含的值。 當使用字節數組和startIndex並計數時,我偶然發現了一個奇怪的行為。
byte[] byteArr = new byte[]{1,2,3,4,5,6,7,8};
string[] stringArr = new string[] {"1","2","3","4","5","6","7","8"};
Console.WriteLine(string.Format("Whole byteArr: {0}",string.Join(", ", byteArr)));
Console.WriteLine(string.Format("Whole stringArr: {0}",string.Join(", ", stringArr)));
Console.WriteLine(string.Format("0 - 5 byteArr: {0}",string.Join(", ", byteArr,0,5)));
Console.WriteLine(string.Format("0 - 5 stringArr: {0}",string.Join(", ", stringArr,0,5)));
給出了這個結果
整個byteArr:1,2,3,4,5,6,7,8
整個弦Arrr:1,2,3,4,5,6,7,8
0 - 5 byteArr:System.Byte [],0,5
0 - 5 stringArr:1,2,3,4,5
為什么string.Join(“,”,byteArr,0,5)返回字符串System.Byte [], 0,5
目前,您正在調用Join
方法的這個重載,該方法使用每個元素之間的指定分隔符來連接對象數組的元素。
public static string Join(
string separator,
params object[] values
)
不是這個:
public static string Join(
string separator,
string[] value,
int startIndex,
int count
)
其中使用每個元素之間的指定分隔符連接字符串數組的指定元素。
這只是因為只有在提供字符串數組作為Join
方法的第二個參數時才會調用帶有startIndex
和count
的重載。
因為你提供的是一個不是字符串的數組作為Join
方法的第二個參數,它最終會調用我上面顯示的第一個重載,因此你看到System.Byte[], 0, 5
因為調用ToString
一個字節數組上將產生System.Byte[]
所述ToString
的表示0
是0
, 5
是5
,因此其結果是System.Byte[], 0, 5
。
那么我們如何確保調用接受startIndex
並count
的版本?
如果你想調用Join
方法的這個重載,並且你擁有的數組不是string[]
那么將你擁有的數組的元素轉換為字符串數組,例如:
Console.WriteLine(string.Format("0 - 5 byteArr: {0}",
string.Join(", ", byteArr.Select(b => b.ToString()).ToArray(), 0, 5)));
通過執行byteArr.Select(b => b.ToString()).ToArray()
我們確保使用startIndex
和count
參數來調用重載。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.