簡體   English   中英

string.Join在字節數組和startIndex上的奇怪行為,計數

[英]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方法的第二個參數時才會調用帶有startIndexcount的重載。

因為你提供的是一個不是字符串的數組作為Join方法的第二個參數,它最終會調用我上面顯示的第一個重載,因此你看到System.Byte[], 0, 5因為調用ToString一個字節數組上將產生System.Byte[]所述ToString的表示0055 ,因此其結果是System.Byte[], 0, 5

那么我們如何確保調用接受startIndexcount的版本?

如果你想調用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()我們確保使用startIndexcount參數來調用重載。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM