using System.Linq.Expressions;
public static void Main()
var registro = new Registro();
var inicio = ClassExtensions.ObterValorInicio(() => registro.tipoRegistro);
Console.WriteLine(inicio);
public class ZoneamentoDados : System.Attribute
public int Fim { get; set; }
public int Inicio { get; set; }
public int Tamanho { get; set; }
public string Obs { get; set; }
public ZoneamentoDados(int fim, int inicio, int tamanho, string obs)
public ZoneamentoDados() { }
[ZoneamentoDados(Fim = 2, Inicio = 10, Tamanho = 2, Obs = "Tipo Registro")]
public String tipoRegistro { get; set; }
public static class ClassExtensions
public static int ObterValorInicio<T>(Expression<Func<T>> expr)
var mexpr = expr.Body as MemberExpression;
if (mexpr == null) return 0;
if (mexpr.Member == null) return 0;
object[] attrs = mexpr.Member.GetCustomAttributes(typeof(ZoneamentoDados), false);
if (attrs == null || attrs.Length == 0) return 0;
ZoneamentoDados desc = attrs[0] as ZoneamentoDados;
if (desc == null) return 0;