Iterate attributes of property, typecast and store info if found
Seems like ive found a great solution, my entire loop can be rewritten as this:

InvokeOnAttr&lt;DisplayAttribute&gt;(property, a =&gt; {
    Name = a.Name;
    Group = a.GroupName;
    Description = a.Description;
});

InvokeOnAttr&lt;MinLengthAttribute&gt;(property, a =&gt; {
    Validate.MinLength = a.Length;
});

InvokeOnAttr&lt;MaxLengthAttribute&gt;(property, a =&gt; {
    Validate.MaxLength = a.Length;
});

InvokeOnAttr&lt;RegularExpressionAttribute&gt;(property, a =&gt; {
    Validate.Regex = a.Pattern;
    Validate.RegexError = a.ErrorMessage;
});


If this method also is availible in the class (it takes a property, finds the attribute (of type TAttr provided), and if found executes the passed in action on it:

public void InvokeOnAttr&lt;TAttr&gt;(PropertyInfo p, Action&lt;TAttr&gt; action) where TAttr : Attribute {
    TAttr attr = p.GetCustomAttribute&lt;TAttr&gt;();
    if (attr is ValidationAttribute)
    {
        if (Validate == null) Validate = new MetaValidate();
    }
    if (attr != null) { 
        action.Invoke(attr);
    }
}