**Existing code (simplified)**

I have this function

```
public static string[] GetFieldNames<T>(IEnumerable<T> items)
  where T : class
{
  var properties = typeof(T).GetProperties().Where(p => SystemTypes.Contains(p.PropertyType)); // Only get System types

  return properties.Select(p => p.Name).ToArray();
}

```

So if say I have this class

```
class MyClass {
  public string Name { get; set; }

  [Description("The value")]
  public int Value { get; set; }
}

```

I can have code like this

```
List<MyClass> items = ...; // Populate items somehow
string[] fieldNames = GetFieldNames(items); // This returns ["Name", "Value"]

```

That works fine.

**The problem**

I need to get the Description (if it exists), so that `GetFieldNames(items)` returns `["Name", "The value"]`

How do I modify the `GetFieldNames()` function to read the Description attribute if it exists?  

(Please note that this function has been simplified, the real function is much more complex, so please avoid changing the logic)