static Action <FeatherWriter, System.Collections.IEnumerable> LookupDefaultAdapter(Type elementType, ColumnType toType) { var key = new AdapterKey { FromType = elementType, ToType = toType }; lock (UntypedEnumerableAdapters) { Action <FeatherWriter, System.Collections.IEnumerable> ret; if (UntypedEnumerableAdapters.TryGetValue(key, out ret)) { return(ret); } var widener = DataWidener.GetWidener(elementType); var typedAdapter = LookupEnumerableAdapter(elementType, toType); UntypedEnumerableAdapters[key] = ret = (writer, data) => { var widend = widener(data); typedAdapter(writer, widend); }; return(ret); } }
static Action <FeatherWriter, System.Collections.IEnumerable> LookupEnumerableAdapter(Type elementType, ColumnType toType) { var key = new AdapterKey { FromType = elementType, ToType = toType }; // making an assumption that actually using the adapter // dominates creating it, making this lock acceptable lock (EnumerableAdapters) { Action <FeatherWriter, System.Collections.IEnumerable> ret; if (EnumerableAdapters.TryGetValue(key, out ret)) { return(ret); } EnumerableAdapters[key] = ret = EnumerableAdapter.Create(elementType, toType); return(ret); } }