// Copyright 2009-2022 Josh Close
// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
// https://github.com/JoshClose/CsvHelper
using System.Reflection;
using CsvHelper.TypeConversion;
using System.Linq.Expressions;
using System;
namespace CsvHelper.Configuration
{
///
/// The configured data for the member map.
///
public class MemberMapData
{
///
/// Gets the member type.
///
public virtual Type Type
{
get
{
if (Member != null)
{
return Member.MemberType();
}
if (IsConstantSet)
{
return Constant?.GetType() ?? typeof(string);
}
if (IsDefaultSet)
{
return Default?.GetType() ?? typeof(string);
}
return typeof(string);
}
}
///
/// Gets the that the data
/// is associated with.
///
public virtual MemberInfo? Member { get; private set; }
///
/// Gets the list of column names.
///
public virtual MemberNameCollection Names { get; } = new MemberNameCollection();
///
/// Gets or sets the index of the name.
/// This is used if there are multiple
/// columns with the same names.
///
public virtual int NameIndex { get; set; }
///
/// Gets or sets a value indicating if the name was
/// explicitly set. True if it was explicitly set,
/// otherwise false.
///
public virtual bool IsNameSet { get; set; }
///
/// Gets or sets the column index.
///
public virtual int Index { get; set; } = -1;
///
/// Gets or sets the index end. The Index end is used to specify a range for use
/// with a collection member. Index is used as the start of the range, and IndexEnd
/// is the end of the range.
///
public virtual int IndexEnd { get; set; } = -1;
///
/// Gets or sets a value indicating if the index was
/// explicitly set. True if it was explicitly set,
/// otherwise false.
///
public virtual bool IsIndexSet { get; set; }
///
/// Gets or sets the type converter.
///
public virtual ITypeConverter? TypeConverter { get; set; }
///
/// Gets or sets the type converter options.
///
public virtual TypeConverterOptions TypeConverterOptions { get; set; } = new TypeConverterOptions();
///
/// Gets or sets a value indicating whether the field should be ignored.
///
public virtual bool Ignore { get; set; }
///
/// Gets or sets the default value used when a CSV field is empty.
///
public virtual object? Default { get; set; }
///
/// Gets or sets a value indicating whether this instance is default value set.
/// the default value was explicitly set. True if it was
/// explicitly set, otherwise false.
///
public virtual bool IsDefaultSet { get; set; }
///
/// Gets or setse a value indicating if the default value should be used when
/// a type conversion failure happens. true to use the default, otherwise
/// false.
///
public virtual bool UseDefaultOnConversionFailure { get; set; }
///
/// Gets or sets the constant value used for every record.
///
public virtual object? Constant { get; set; }
///
/// Gets or sets a value indicating if a constant was explicitly set.
///
public virtual bool IsConstantSet { get; set; }
///
/// Gets or sets the expression used to convert data in the
/// row to the member.
///
public virtual Expression ReadingConvertExpression { get; set; }
///
/// Gets or sets the expression to be used to convert the object
/// to a field.
///
public virtual Expression WritingConvertExpression { get; set; }
///
/// Gets or sets the expression use to validate a field.
///
public virtual Expression ValidateExpression { get; set; }
///
/// Gets or sets the expression used to get the validation message when validation fails.
///
public virtual Expression ValidateMessageExpression { get; set; }
///
/// Gets or sets a value indicating if a field is optional.
///
public virtual bool IsOptional { get; set; }
///
/// Initializes a new instance of the class.
///
/// The member.
public MemberMapData(MemberInfo? member)
{
Member = member;
}
}
}