Skip to content

Instantly share code, notes, and snippets.

@jzebedee
Created March 13, 2019 23:41
Show Gist options
  • Save jzebedee/40bb2d266938a74ea06073d5a0d220db to your computer and use it in GitHub Desktop.
Save jzebedee/40bb2d266938a74ea06073d5a0d220db to your computer and use it in GitHub Desktop.
try.dot.net - strings
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