在C#中,是否有一种使用反射仅检索内置数据类型属性的方法?

4
使用反射,我想从C#对象中仅检索内置数据类型属性。有没有更好的方法来做这件事,而不是在Where方法中使用一堆||(或)指定我感兴趣的类型?
Type sourceType = typeof(TSource);

var props = sourceType.GetProperties()
    .Where(pi => pi.PropertyType == typeof(int)
              || pi.PropertyType == typeof(string));    // .... etc.
2个回答

6

它们都在System命名空间中,所以您至少可以按命名空间进行过滤,除此之外,至少列表不会太长。您不应该链式使用Where,而是应该使用||,否则该代码将无法正常工作。


非常正确的字符串拼接会对业务产生不良影响。这是一个漫长的一周,我因为在问题中编写了思考不周的代码而感到抱歉。 ;) - ahsteele
没关系,你很快就会弄明白的。 - Richard Anthony Freeman-Hein

5
你是否正在寻找与BCL相关的整数类型或值类型(例如整数、字符等)?
如果是这样,你可以测试pi.PropertyType.IsPrimitive(),然后将字符串类型作为or子句的一部分进行测试...
var props = sourceType.GetProperties()
    .Where(pi => .PropertyType.IsPrimitive
              || pi.PropertyType == typeof(string))

好的,那至少缩小了列表范围。 - Richard Anthony Freeman-Hein

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接