Search code examples
c#csvhelper

CsvHelper. How can i invoke ConvertUsing of MemberMap in an extension method?


While trying to extend the MemberMap of CsvHelper

        public static MemberMap Required<T>(this MemberMap map, string columnName)
        {
            return map.Name(columnName).ConvertUsing(row =>
            {
                if (string.IsNullOrEmpty(row.GetField(columnName)))
                    throw new CsvParserException($"{columnName} is required");
                return row.GetField<T>(columnName);
            });
        }

i get the error

'MemberMap' does not contain a definition for 'ConvertUsing' and no accessible extension method 'ConvertUsing' accepting a first argument of type 'MemberMap' could be found

What am i doing wrong here?


Solution

  • Changing to <TClass, T> made it magic.

    public static MemberMap Required<TClass, T>(this MemberMap<TClass, T> map, string columnName)
            {
                return map.ConvertUsing(row =>
                {
                    if (string.IsNullOrEmpty(row.GetField(columnName)))
                        throw new ArgumentNullException($"{columnName} is required, but missing from row {row.Context.Row}");
                    return row.GetField<T>(columnName);
                });
            }
    

    Special thanks to Steve.