
public static readonly string[] PATH_FIELD_NAMES_EXCEPTIONS_SUBSRTINGS = { "Array", "data[" };
private static bool IsException(string fieldName)
{
for (int j = 0; j < TypeExtensions.PATH_FIELD_NAMES_EXCEPTIONS_SUBSRTINGS.Length; j++)
if (fieldName.Substring(0, TypeExtensions.PATH_FIELD_NAMES_EXCEPTIONS_SUBSRTINGS[j].Length) == TypeExtensions.PATH_FIELD_NAMES_EXCEPTIONS_SUBSRTINGS[j])
return true;
return false;
}
/// <summary>
/// Search to top of the hierarchy via fieldNames
/// </summary>
/// <param name="type"></param>
/// <param name="fieldNames"></param>
/// <returns>Parent object FieldInfo || null if has no parent</returns>
public static FieldInfo GetParentObjectFieldInfoViaPath(this Type type, string[] fieldNames)
{
FieldInfo fieldInfo = null;
for (int i = 0; i < fieldNames.Length - 1; i++)
{
//if (TypeExtensions.IsException(fieldNames[i]))
// continue;
if (type.IsArray)
{
type = type.GetElementType();
i += 2;
}
fieldInfo = type.GetField(fieldNames[i], BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
if (fieldInfo.FieldType.IsArray && i + 3 >= fieldNames.Length)
break;
type = fieldInfo.FieldType;
}
return fieldInfo;
}
Here is a quick workaround, cheat :) Check if it's an array, if it is, then skip 2 steps (Array, data[n])
. Then the magic method - GetElementType()
and everything is fine.
reflection
, so I guess there may not be another way but to parse strings infieldNames
array. \$\endgroup\$ – Candid Moon _Max_ Mar 19 '18 at 18:58