Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In C# is there a way retrieve only built-in data type properties using reflection

Using reflection I'd like to retrieve only the built-in data type properties from a C# object. Is there a better way to do that then using a bunch of || (ors) in a Where method specifying the types I am interested in?

Type sourceType = typeof(TSource);

var props = sourceType.GetProperties()
    .Where(pi => pi.PropertyType == typeof(int)
              || pi.PropertyType == typeof(string));    // .... etc.
like image 401
ahsteele Avatar asked Dec 23 '22 01:12

ahsteele


2 Answers

They are all in the System namespace, so you could at least filter to namespace, other than that, at least the list isn't too long. You wouldn't chain Where's either, you'd use ||'s, that code won't work.

like image 143
Richard Anthony Freeman-Hein Avatar answered May 12 '23 10:05

Richard Anthony Freeman-Hein


Are you looking for integral types to the BCL? Or value types only? (IE integer, char, etc)

If so, you could test for pi.PropertyType.IsPrimitive() and then test for string type as part of the or clause...

var props = sourceType.GetProperties()
    .Where(pi => .PropertyType.IsPrimitive
              || pi.PropertyType == typeof(string))
like image 29
Kilanash Avatar answered May 12 '23 11:05

Kilanash