Pass class property as parameter to extension method
I'd suggest:

public static class AttributeExtensions
{
    public static string GetMyAttributeNameOfProperty&lt;TClass&gt;(string propertyName)
    {
        var propertyInfo = typeof(TClass).GetProperty(propertyName);
        return propertyInfo?.GetCustomAttribute&lt;MyAttribute&gt;()?.Name ?? default;
    }
}


Usage:

var awesome = AttributeExtensions.GetMyAttributeNameOfProperty&lt;Matrix&gt;(nameof(Matrix.AwesomeName));
Console.WriteLine(awesome);


Note:  The above isn't an extension method.  The below code is.

public static class AttributeExtensions
{
    public static string GetMyAttributeNameOfProperty&lt;TType&gt;(this TType me, string propertyName) where TType : Type
    {
        var propertyInfo = me.GetProperty(propertyName);
        return propertyInfo?.GetCustomAttribute&lt;MyAttribute&gt;()?.Name ?? default;
    }
}


Usage:

var awesome = typeof(Matrix).GetMyAttributeNameOfProperty(nameof(Matrix.AwesomeName));
Console.WriteLine(awesome);


Both output:


  awesome_name


Benefits:


Does not use an Expression or even the namespace
System.Linq.Expressions 
Won't throw an exception (returns null if property or attribute doesn't exist)
Using nameof makes refactoring safe in the event you rename class properties
Does not use Func&lt;TClass, object&gt; or similar
Does not require an instance of Matrix (or any other type since it's generic) 


Either way works and is really a matter of preference.  There are pros and cons to using extension methods.