5

我有一个 Person 类:

public class Person 
{
    virtual public long Code { get; set; }
    virtual public string Title { get; set; }       
    virtual public Employee Employee { get; set; }
}

我需要一个通用的解决方案来通过自定义类类型获取没有属性的 Person 类的所有属性。表示选择CodeTitle属性。

typeof(Person).GetProperties();           //Title , Code , Employee
typeof(Person).GetProperties().Where(x => !x.PropertyType.IsClass); // Code

如何选择没有自定义类类型的所有属性?( Code, Title)

4

2 回答 2

4

一种方法是检查ScopeNameModuleType

typeof(Person).GetProperties().Where(x => x.PropertyType.Module.ScopeName == "CommonLanguageRuntimeLibrary")

因为没有直接的方法来判断一个类型是否是内置的。

要获得其他想法,请参阅此处此处此处

于 2012-08-21T12:21:09.863 回答
0

我建议使用一个属性:

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class SimplePropertyAttribute : Attribute
{
}

public class Employee { }

public class Person
{
    [SimpleProperty]
    virtual public long Code { get; set; }

    [SimpleProperty]
    virtual public string Title { get; set; }

    virtual public Employee Employee { get; set; }
}

internal class Program
{
    private static void Main(string[] args)
    {
        foreach (var prop in typeof(Person)
            .GetProperties()
            .Where(z => z.GetCustomAttributes(typeof(SimplePropertyAttribute), true).Any()))
        {
            Console.WriteLine(prop.Name);
        }

        Console.ReadLine();
    }
}
于 2012-08-21T12:28:50.550 回答