示例#1
0
        public static String Bind(String format, object source, SourceAttributeType type)
        {
            var result = "";
            var sourceType = source.GetType();
            var innerBracket = -1;

            format += " "; //padding

            for (var i = 0; i < format.Length - 1; i++)
            {
                if (innerBracket != -1)
                {
                    if (format[i] == '}')
                    {
                        var key = format.Substring(innerBracket + 2, i - innerBracket - 2);
                        dynamic valueSource = ResolveObjectPath(key, source, type);

                        if (valueSource != null)
                        {
                            var value = valueSource.GetValue(source);
                            result += value;
                        }
                        else
                        {
                            result += "#{" + key + "}";
                        }

                        innerBracket = -1;
                    }
                }
                else
                {
                    if (format[i] == '#' && format[i + 1] == '{')
                        innerBracket = i;
                    else
                        result += format[i];
                }
            }

            return result;
        }
示例#2
0
        private static MemberInfo ResolveObjectPath(String path, object source, SourceAttributeType type)
        {
            var tokens = path.Split('.');
            var current = source;
            dynamic attr = null;

            foreach (var token in tokens)
            {
                if (type == SourceAttributeType.Field)
                    attr = current.GetType().GetField(token);
                else
                    attr = current.GetType().GetProperty(token);

                if (attr == null)
                    return null;

                current = attr.GetValue(current);
            }

            return attr;
        }