Created
March 13, 2019 23:41
-
-
Save jzebedee/40bb2d266938a74ea06073d5a0d220db to your computer and use it in GitHub Desktop.
try.dot.net - strings
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
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Runtime.InteropServices; | |
public class Program | |
{ | |
public static void Main() | |
{ | |
char empty_char = '\0'; | |
p(nameof(empty_char), DumpToBytes(empty_char)); | |
char empty_char_default = default; | |
p(nameof(empty_char_default), DumpToBytes(empty_char_default)); | |
string empty_string = default; | |
p(nameof(empty_string), DumpToBytes(empty_string)); | |
char? nullableChar = null; | |
//p(nameof(nullableChar), DumpToBytes(nullableChar.Value)); throws -- you can't get an equivalent representation | |
var muckedUp1 = new string("".ToArray()); | |
Console.WriteLine(muckedUp1 == ""); | |
p(nameof(muckedUp1), DumpToBytes(muckedUp1)); | |
var fod_muckedUp1 = muckedUp1.FirstOrDefault(); | |
p(nameof(fod_muckedUp1), DumpToBytes(fod_muckedUp1)); | |
var muckedUp2 = fod_muckedUp1.ToString(); | |
Console.WriteLine(muckedUp2 == ""); | |
p(nameof(muckedUp2), DumpToBytes(muckedUp2)); | |
string nullableCharToString = nullableChar.ToString(); | |
Console.WriteLine(nullableCharToString == ""); | |
p(nameof(nullableCharToString), DumpToBytes(nullableCharToString)); | |
//string.Empty.FirstOrDefault().ToString() != string.Empty | |
var fod_muckedUp3 = string.Empty.FirstOrDefault(); | |
p(nameof(fod_muckedUp3), DumpToBytes(fod_muckedUp3)); | |
var muckedUp3 = fod_muckedUp3.ToString(); | |
Console.WriteLine(muckedUp3 != ""); | |
p(nameof(muckedUp3), DumpToBytes(muckedUp3)); | |
//string.Empty.FirstOrDefault().ToString() == '\0'.ToString() | |
var empty_char_string = empty_char.ToString(); | |
p(nameof(empty_char_string), DumpToBytes(empty_char_string)); | |
Console.WriteLine(muckedUp3 == empty_char_string); | |
} | |
public static void p(string label, ReadOnlySpan<byte> bytes) | |
{ | |
Console.WriteLine($"{label.PadRight(40)}{bytes.ToString()}"); | |
Console.Write("\t"); | |
for(int i = 0; i < bytes.Length; i++) Console.Write("{0:x2}", bytes[i]); | |
Console.WriteLine(); | |
} | |
public static byte[] DumpToBytes<T>(T o) where T : struct | |
{ | |
ReadOnlySpan<T> holder = MemoryMarshal.CreateReadOnlySpan(ref o, 1); | |
return MemoryMarshal.AsBytes(holder).ToArray(); | |
} | |
public static byte[] DumpToBytes(ReadOnlySpan<char> holder) | |
{ | |
return MemoryMarshal.AsBytes(holder).ToArray(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment