views:

73

answers:

2

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.
+6  A: 

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.

Richard Hein
Very true stringing wheres would be bad for business. Long week and my bad for just putting poorly thought through code in my question. ;)
ahsteele
No worries, you'd have figured it out soon enough.
Richard Hein
+5  A: 

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))
Kilanash
Good call, that narrows the list down at least.
Richard Hein