public static FieldInfo[] GetFields(Type type, string[] columns)
{
FieldInfo[] result;
if (!_fieldCache.TryGetValue(type, out result))
{
var fields = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
var relevantFields = new List<FieldInfo>();
foreach (var fieldInfo in fields)
{
var attributes2 = fieldInfo.GetCustomAttributes(true);
if ((attributes2.Length == 1) && (attributes2[0] is ErrorLogAttribute))
{
continue;
}
if (fieldInfo.IsPrivate)
{
var attributes = fieldInfo.GetCustomAttributes(true);
if (attributes.Length == 0 || !(attributes[0] is ConfigProperty))
{
continue;
}
}
relevantFields.Add(fieldInfo);
var fieldType = fieldInfo.FieldType;
if (fieldType == typeof(string))
{
_setters[fieldInfo] = StringSetter;
}
else if (fieldType == typeof(int))
{
_setters[fieldInfo] = IntSetter;
}
else if (!fieldType.IsArray)
{
_setters[fieldInfo] = ConverterSetter(fieldInfo);
}
else
{
// array
_arrayLength[fieldInfo] = FindLengthOfArray(fieldInfo.Name, columns);
var elementType = fieldType.GetElementType();
if (elementType == typeof(string))
{
_arraySetters[fieldInfo] = StringArraySetter;
}
else if (elementType == typeof(int))
{
_arraySetters[fieldInfo] = IntArraySetter;
}
else
{
_arraySetters[fieldInfo] = ConverterArraySetter(elementType);
}
}
}
result = relevantFields.ToArray();
_fieldCache[type] = result;
}
return result;
}