Распечатайте содержимое массива (код - одна строка, для использования в окне Immediate визуальной студии)
Можете ли вы написать удобную строку кода, которая печатает содержимое массива?
Я буду использовать это в окне Immediate Window Visual Studio 2008, поэтому он действительно должен работать в этом окне. Возможно, я отказался от некоторых требований, но это в значительной степени то, что я пытаюсь сделать.
Ответы
Ответ 1
myArray.ToList().ForEach(Console.WriteLine);
Честно говоря, я не думаю, что это будет работать в ближайшем окне. Это хорошая трюк, чтобы напечатать все в одной строке, но я думаю, что для немедленного окна все, что вам нужно, это следующее:
? myArray
Ответ 2
Я использую:
BitConverter.ToString(bytes); //output: 4A-0B-11-13 etc.
Плохой битконвертер, всегда забытый.
Ответ 3
где a
- массив
?a
Ответ 4
String.Join("; ", myArray);
Ответ 5
Для обоих окон Watch и Immediate в Visual Studio будет использоваться строка, возвращаемая ToString() для объекта.
Таким образом, вы можете переопределить ToString(), если хотите и отформатировать читаемое человеком представление любого из ваших классов, чтобы они отображали необходимую информацию в окнах Watch или Immediate во время операций отладки.
Например,
public class Foo
{
public String Bar { get; set; }
private Int32 _intValue;
public Int32 Value { get { return _intValue; } }
override public ToString()
{
return "Bar: " + Bar + " has Value: " + Value;
}
}
Итак, если вы создаете массив объектов Foo с именем fooArray, набрав? fooArray в окне Immediate отобразит все объекты Foo с возвращаемым значением ToString() для каждого в фигурных скобках. Что-то вроде этого:
? fooArray
{Foo[2]}
[0]: {Bar: hi has Value: 1}
[1]: {Bar: there has Value: 2}
Ответ 6
Помните, что вы можете ссылаться на метод в программе, которую вы отлаживаете. У меня есть метод утилиты (скажем, в классе MyDebug):
public static string ToReadableString(byte[] data)
{
int length = data.Length;
var sb = new StringBuilder(length);
for (int index = 0; index < length; ++index)
{
char ch = (char)data[index];
sb.Append(Char.IsControl(ch) ? '.' : ch);
}
return sb.ToString();
}
и (поскольку мой массив называется данными), добавьте оператор Watch:
MyDebug.ToReadableString(data)
Ответ 7
У меня была эта проблема с массивом байтов, содержащимся в MemoryStream, - я нашел, что это сработало для просмотра содержимого MemoryStream в окне Visual Studio 2010 Watch:
System.Text.ASCIIEncoding.ASCII.GetString(((((System.IO.MemoryStream)(s)))._buffer))
Ответ 8
Вы всегда можете создать вторую переменную с нужным контентом и проверить ее значение.
var ids = people.Select(s => s.id).ToList();
Вернет все идентификаторы, которые вы пытаетесь увидеть.
Ответ 9
Может быть проще просто использовать вкладку "Часы". Но просто введите имя массива в непосредственной вкладке, чтобы вернуть содержимое в несколько полезный формат.