Skip to content

Instantly share code, notes, and snippets.

@svick
Last active August 9, 2019 13:46
Show Gist options
  • Select an option

  • Save svick/d001b43f714f78a1dff7f65caaf889c9 to your computer and use it in GitHub Desktop.

Select an option

Save svick/d001b43f714f78a1dff7f65caaf889c9 to your computer and use it in GitHub Desktop.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFrameworks>net472;netcoreapp3.0</TargetFrameworks>
</PropertyGroup>
</Project>
PS C:\code\tmp\comparer-serialization> .\bin\Debug\netcoreapp3.0\win10-x64\publish\comparer-serialization.exe v
_comparer: System.Collections.Generic.NonRandomizedStringEqualityComparer
Comparer: System.OrdinalCaseSensitiveComparer
PS C:\code\tmp\comparer-serialization> dotnet run -f net472 s
comparer: System.Collections.Generic.GenericEqualityComparer`1[System.String]
Comparer: System.Collections.Generic.GenericEqualityComparer`1[System.String]
PS C:\code\tmp\comparer-serialization> dotnet run -f net472 d
comparer: System.Collections.Generic.GenericEqualityComparer`1[System.String]
Comparer: System.Collections.Generic.GenericEqualityComparer`1[System.String]
PS C:\code\tmp\comparer-serialization> dotnet run -f netcoreapp3.0 d
_comparer: System.Collections.Generic.GenericEqualityComparer`1[System.String]
Comparer: System.Collections.Generic.GenericEqualityComparer`1[System.String]
PS C:\code\tmp\comparer-serialization> .\bin\Debug\netcoreapp3.0\win10-x64\publish\comparer-serialization.exe d
_comparer: System.Collections.Generic.GenericEqualityComparer`1[System.String]
Comparer: System.Collections.Generic.GenericEqualityComparer`1[System.String]
PS C:\code\tmp\comparer-serialization> dotnet run -f netcoreapp3.0 s
_comparer: System.Collections.Generic.NonRandomizedStringEqualityComparer
Comparer: System.Collections.Generic.GenericEqualityComparer`1[System.String]
PS C:\code\tmp\comparer-serialization> dotnet run -f net472 d
comparer: System.Collections.Generic.GenericEqualityComparer`1[System.String]
Comparer: System.Collections.Generic.GenericEqualityComparer`1[System.String]
PS C:\code\tmp\comparer-serialization> dotnet run -f netcoreapp3.0 d
_comparer: System.Collections.Generic.GenericEqualityComparer`1[System.String]
Comparer: System.Collections.Generic.GenericEqualityComparer`1[System.String]
PS C:\code\tmp\comparer-serialization> .\bin\Debug\netcoreapp3.0\win10-x64\publish\comparer-serialization.exe d
_comparer: System.Collections.Generic.GenericEqualityComparer`1[System.String]
Comparer: System.Collections.Generic.GenericEqualityComparer`1[System.String]
PS C:\code\tmp\comparer-serialization> .\bin\Debug\netcoreapp3.0\win10-x64\publish\comparer-serialization.exe s
_comparer: System.Collections.Generic.NonRandomizedStringEqualityComparer
Comparer: System.Collections.Generic.GenericEqualityComparer`1[System.String]
PS C:\code\tmp\comparer-serialization> dotnet run -f net472 d
comparer: System.Collections.Generic.GenericEqualityComparer`1[System.String]
Comparer: System.Collections.Generic.GenericEqualityComparer`1[System.String]
PS C:\code\tmp\comparer-serialization> dotnet run -f netcoreapp3.0 d
_comparer: System.Collections.Generic.GenericEqualityComparer`1[System.String]
Comparer: System.Collections.Generic.GenericEqualityComparer`1[System.String]
PS C:\code\tmp\comparer-serialization> .\bin\Debug\netcoreapp3.0\win10-x64\publish\comparer-serialization.exe d
_comparer: System.Collections.Generic.GenericEqualityComparer`1[System.String]
Comparer: System.Collections.Generic.GenericEqualityComparer`1[System.String]
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization.Formatters.Binary;
using static System.Reflection.BindingFlags;
class Program
{
static void Main(string[] args)
{
string path = "dict.bin";
Dictionary<string, string> dict;
string arg = args.Single();
if (arg == "v")
{
// used to verify we're actually running modified code
dict = new Dictionary<string, string>(StringComparer.Ordinal);
}
else if (arg == "s")
{
dict = new Dictionary<string, string>();
using (var file = File.OpenWrite(path))
{
var formatter = new BinaryFormatter();
formatter.Serialize(file, dict);
}
}
else if (arg == "d")
{
using (var file = File.OpenRead(path))
{
var formatter = new BinaryFormatter();
dict = (Dictionary<string, string>)formatter.Deserialize(file);
}
}
else
{
throw new Exception();
}
string comparerFieldName = "comparer";
#if NETCOREAPP3_0
comparerFieldName = "_" + comparerFieldName;
#endif
var comparerFieldValue = dict.GetType().GetField(comparerFieldName, NonPublic | Instance).GetValue(dict);
Console.WriteLine($"{comparerFieldName}: {comparerFieldValue}");
Console.WriteLine($"Comparer: {dict.Comparer}");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment