5

私は Person クラスを持っています:

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

カスタムクラスタイプによるプロパティなしで Person クラスのすべてのプロパティを取得するための一般的なソリューションが必要です。select CodeTitleプロパティを意味します。

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

カスタム クラス タイプのないすべてのプロパティを選択するにはどうすればよいですか? ( Code, Title)

4

2 に答える 2

4

1 つの方法は、 の をチェックすることScopeNameです。ModuleType

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 に答える