public static void Write <T1, T2>(this Tuple <T1, T2>[] _this, AssetWriter writer, Func <T1, int> converter)
     where T2 : IAssetWritable
 {
     writer.Write(_this.Length);
     for (int i = 0; i < _this.Length; i++)
     {
         writer.Write(_this[i], converter);
     }
 }
 public static void Write <T>(this Tuple <string, T>[] _this, AssetWriter writer)
     where T : IAssetWritable
 {
     writer.Write(_this.Length);
     for (int i = 0; i < _this.Length; i++)
     {
         writer.Write(_this[i]);
     }
 }
 public static void Write <T>(this IReadOnlyDictionary <string, T> _this, AssetWriter writer)
     where T : IAssetWritable
 {
     writer.Write(_this.Count);
     foreach (var kvp in _this)
     {
         writer.Write(kvp.Key);
         kvp.Value.Write(writer);
     }
 }
 public static void Write <T1, T2>(this IReadOnlyDictionary <T1, T2> _this, AssetWriter writer)
     where T1 : IAssetWritable
     where T2 : IAssetWritable
 {
     writer.Write(_this.Count);
     foreach (var kvp in _this)
     {
         kvp.Key.Write(writer);
         kvp.Value.Write(writer);
     }
 }
 public static void Write <T1, T2>(this AssetWriter _this, Tuple <T1, T2> value, Func <T1, int> converter)
     where T2 : IAssetWritable
 {
     _this.Write(converter(value.Item1));
     value.Item2.Write(_this);
 }
 public static void Write <T>(this AssetWriter _this, Tuple <string, T> value)
     where T : IAssetWritable
 {
     _this.Write(value.Item1);
     value.Item2.Write(_this);
 }