Created
February 3, 2022 01:24
-
-
Save gregmac/b2c13fc4381166a13f6acac26f75ea25 to your computer and use it in GitHub Desktop.
LINQPad Extensions
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public static class MyExtensions | |
{ | |
// Write custom extension methods here. They will be available to all queries. | |
/// <summary>Dump a string using wrapping</summary> | |
public static string DumpWrapped(this string value, string title = null, int width = 120) | |
{ | |
string.Join("\n", value.Select((x, i) => i) | |
.Where(i => i % width == 0) | |
.Select(i => value.Substring(i, value.Length - i >= width ? width : value.Length - i))) | |
.Dump(title); | |
return value; | |
} | |
/// <summary>Dump a JSON string as formatted JSON</summary> | |
public static string DumpJson(this string value, string title = null) | |
{ | |
Newtonsoft.Json.JsonConvert.SerializeObject( | |
Newtonsoft.Json.JsonConvert.DeserializeObject(value), | |
Newtonsoft.Json.Formatting.Indented) | |
.Dump(title); | |
return value; | |
} | |
/// <summary>Dump hex and binary values</summary> | |
public static byte DumpBinary(this byte value, string description = null) | |
{ | |
DumpBinary(value, value.ToString("X"), Convert.ToString(value, 2)); | |
return value; | |
} | |
/// <summary>Dump hex and binary values</summary> | |
public static short DumpBinary(this short value, string description = null) | |
{ | |
DumpBinary(value, value.ToString("X"), Convert.ToString(value, 2)); | |
return value; | |
} | |
/// <summary>Dump hex and binary values</summary> | |
public static int DumpBinary(this int value, string description = null) | |
{ | |
DumpBinary(value, value.ToString("X"), Convert.ToString(value, 2)); | |
return value; | |
} | |
/// <summary>Dump hex and binary values</summary> | |
public static long DumpBinary(this long value, string description = null) | |
{ | |
DumpBinary(value, value.ToString("X"), Convert.ToString(value, 2)); | |
return value; | |
} | |
/// <summary>Dump hex and binary values</summary> | |
public static sbyte DumpBinary(this sbyte value, string description = null) | |
{ | |
DumpBinary(value, value.ToString("X"), Convert.ToString(value, 2)); | |
return value; | |
} | |
/// <summary>Dump hex and binary values</summary> | |
public static float DumpBinary(this float value, string description = null) | |
{ | |
DumpBinary(value, value.ToString("X"), Convert.ToString(value)); | |
return value; | |
} | |
/// <summary>Dump hex and binary values</summary> | |
public static ushort DumpBinary(this ushort value, string description = null) | |
{ | |
DumpBinary(value, value.ToString("X"), Convert.ToString(value, 2)); | |
return value; | |
} | |
/// <summary>Dump hex and binary values</summary> | |
public static uint DumpBinary(this uint value, string description = null) | |
{ | |
DumpBinary(value, value.ToString("X"), Convert.ToString(value, 2)); | |
return value; | |
} | |
/// <summary>Dump hex and binary values</summary> | |
public static ulong DumpBinary(this ulong value, string description = null) | |
{ | |
DumpBinary(value, value.ToString("X"), Convert.ToString((long)value, 2)); | |
return value; | |
} | |
/// <summary>Dump hex and binary values</summary> | |
private static void DumpBinary(object value, string hexString, string binaryString, string description = null) | |
{ | |
new | |
{ | |
Value = value, | |
Type = value.GetType(), | |
Hex = GroupDigits(hexString, 2), | |
Binary = GroupDigits(binaryString, 4), | |
}.Dump(description); | |
} | |
/// <summary>Insert separator every digitsPerGroup characters, with padding</summary> | |
private static string GroupDigits(string value, byte digitsPerGroup, string separator = " ", char leftPadChar = '0') | |
{ | |
var padding = value.Length % digitsPerGroup; | |
return string.Join(separator, | |
(value | |
.Select((digit, idx) => new { idx, digit }) | |
.GroupBy(x => (x.idx + digitsPerGroup - padding) / digitsPerGroup) | |
.Select(g => string.Concat(g.Select(x => x.digit)).PadLeft(digitsPerGroup, leftPadChar)))); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment