/// <summary>Apply the patch to a list asset.</summary>
        /// <typeparam name="TValue">The list value type.</typeparam>
        /// <param name="asset">The asset to edit.</param>
        private void ApplyList <TValue>(IAssetData asset)
        {
            // TODO: this is a horrible hack.
            Dictionary <string, TValue> data = ((List <TValue>)asset.Data).ToDictionary(this.GetId);
            IAssetData newAsset = (IAssetData)asset
                                  .GetType()
                                  .GetConstructor(new[] { typeof(string), typeof(string), typeof(object), typeof(Func <string, string>) })
                                  .Invoke(new[] { asset.Locale, asset.AssetName, data, asset.GetType().GetField("GetNormalisedPath", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy).GetValue(asset) });

            this.ApplyDictionary <string, TValue>(newAsset);

            asset.ReplaceWith(data.Values.ToList());
        }