private void SetNullableColumnValue(T rowData, ColumnInfo <T> prop, CellRead value, Action <T, ColumnInfo <T>, CellRead> action)
 {
     if (value.Value == null || value.Value == string.Empty)
     {
         prop.SetValueFunc(rowData, null);
     }
     else
     {
         action.Invoke(rowData, prop, value);
     }
 }
 private void SetColumnValue(T rowData, ColumnInfo <T> prop, CellRead value)
 {
     if (prop.Type == TypesEnum.String)
     {
         ParseToStringValue(rowData, prop, value);
     }
     else if (prop.Type == TypesEnum.Bool)
     {
         ParseToBoolValue(rowData, prop, value);
     }
     else if (prop.Type == TypesEnum.NullableBool)
     {
         SetNullableColumnValue(rowData, prop, value, ParseToBoolValue);
     }
     else if (prop.Type == TypesEnum.Int)
     {
         ParseToIntValue(rowData, prop, value);
     }
     else if (prop.Type == TypesEnum.NullableInt)
     {
         SetNullableColumnValue(rowData, prop, value, ParseToIntValue);
     }
     else if (prop.Type == TypesEnum.Long)
     {
         ParseToIntValue(rowData, prop, value);
     }
     else if (prop.Type == TypesEnum.NullableLong)
     {
         SetNullableColumnValue(rowData, prop, value, ParseToLongValue);
     }
     else if (prop.Type == TypesEnum.Decimal)
     {
         ParseToDecimalValue(rowData, prop, value);
     }
     else if (prop.Type == TypesEnum.NullableDecimal)
     {
         SetNullableColumnValue(rowData, prop, value, ParseToDecimalValue);
     }
     else if (prop.Type == TypesEnum.DateTime)
     {
         ParseToDateTimeValue(rowData, prop, value);
     }
     else if (prop.Type == TypesEnum.NullableDateTime)
     {
         SetNullableColumnValue(rowData, prop, value, ParseToDateTimeValue);
     }
 }
 private void ParseToLongValue(T rowData, ColumnInfo <T> prop, CellRead value)
 {
     if (IsEmptyCell(value, prop))
     {
         prop.SetValueFunc(rowData, null);
     }
     else if (value.Type == XLDataType.Text)
     {
         prop.SetValueFunc(rowData, long.Parse((string)value.Value));
     }
     else if (value.Type == XLDataType.Number)
     {
         prop.SetValueFunc(rowData, Convert.ToInt64(value.Value));
     }
     else
     {
         ThrowImportColumnParseException(prop, value);
     }
 }
        private void ParseToDateTimeValue(T rowData, ColumnInfo <T> prop, CellRead value)
        {
            if (value.Value == null)
            {
                return;
            }

            if (prop.Type == TypesEnum.String && ((string)value.Value).Trim() == "")
            {
                prop.SetValueFunc(rowData, null);
            }
            else if (value.Type == XLDataType.DateTime)
            {
                prop.SetValueFunc(rowData, (DateTime)value.Value);
            }
            else if (value.Type == XLDataType.Text && !string.IsNullOrEmpty(StringDateFormat))
            {
                prop.SetValueFunc(rowData, TryParseDateTimeFromStringValue(value.Value.ToString()));
            }
            else
            {
                ThrowImportColumnParseException(prop, value);
            }
        }
 private void ThrowImportColumnParseException(ColumnInfo <T> prop, CellRead value)
 {
     throw new ImportColumnParseException($@"Failure on parse '{value.Value}' to type '{prop.Type}' 
             from type {value.Type.GetName()}");
 }
 private bool IsEmptyCell(CellRead value, ColumnInfo <T> columnInfo)
 {
     return((columnInfo.Type == TypesEnum.String && (string)value.Value == "") ||
            value.Value == null);
 }
        private void ParseToStringValue(T rowData, ColumnInfo <T> prop, CellRead value)
        {
            string valueToSet = value.Value != null?value.Value.ToString() : "";

            prop.SetValueFunc(rowData, valueToSet);
        }