using System; using System.Reflection; namespace FSO.Common.Utils { public static class DotPath { public static PropertyInfo[] CompileDotPath(Type sourceType, string sourcePath) { //Dot path var path = sourcePath.Split(new char[] { '.' }); var properties = new PropertyInfo[path.Length]; var currentType = sourceType; for (int i = 0; i < path.Length; i++) { var property = currentType.GetProperty(path[i]); properties[i] = property; currentType = property.PropertyType; } return properties; } public static object GetDotPathValue(object source, PropertyInfo[] path) { if (source == null) { return null; } var currentValue = source; for (var i = 0; i < path.Length; i++) { currentValue = path[i].GetValue(currentValue, null); if (currentValue == null) { return null; } } return currentValue; } public static void SetDotPathValue(object source, PropertyInfo[] path, object value) { if (source == null) { return; } var currentValue = source; for (var i = 0; i < path.Length - 1; i++) { currentValue = path[i].GetValue(currentValue, null); if (currentValue == null) { return; } } var member = path[path.Length - 1]; member.SetValue(currentValue, value, null); } } }