public static string[][] OptionsForPreposition(Type typeOfPreposition) { string[][] result; if (prepositionOptions.TryGetValue(typeOfPreposition, out result)) { return(result); } string[][] newEntry; lock (typeof(TextParsing)) //Make sure the ResourceCollection is up to date by the time we set prepositionOptions. { ResourceCollection collection = GetCollection(typeOfPreposition); if (typeof(EnumClass <>).IsAssignableFrom(typeOfPreposition)) { //FieldInfo field = typeOfPreposition.GetMethod("backingMetaData", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public); //EnumMetaData field.GetValue(null); EnumClass[] objects = EnumClass.GetValues(typeOfPreposition); newEntry = new string[objects.Length][]; for (int i = 0; i < objects.Length; i++) { string name = objects[i].Name; string list = collection.GetValue(name); string[] options = list.Split(','); newEntry[i] = options; } } else { Array values = Enum.GetValues(typeOfPreposition); newEntry = new string[values.Length][]; for (int i = 0; i < values.Length; i++) { string name = Enum.GetName(typeOfPreposition, values.GetValue(i)); string list = collection.GetValue(name); string[] options = list.Split(','); newEntry[i] = options; } } prepositionOptions[typeOfPreposition] = newEntry; } return(newEntry); }