5

タイプを反映して、パブリックセッターのあるプロパティのみを取得しようとしています。これは私にはうまくいかないようです。以下のLinqPadスクリプトの例では、「Id」と「InternalId」が「Hello」とともに返されます。それらを除外するにはどうすればよいですか?

void Main()
{
    typeof(X).GetProperties(BindingFlags.SetProperty | BindingFlags.Public | BindingFlags.Instance)
    .Select (x => x.Name).Dump();
}

public class X
{
    public virtual int Id { get; protected set;}
    public virtual int InternalId { get; protected internal set;}
    public virtual string Hello { get; set;}
}
4

1 に答える 1

5

GetSetMethod()を使用して、セッターがパブリックかどうかを判断できます。

例えば:

typeof(X).GetProperties(BindingFlags.SetProperty |
                        BindingFlags.Public |
                        BindingFlags.Instance)
    .Where(prop => prop.GetSetMethod() != null)
    .Select (x => x.Name).Dump();

は、メソッドのGetSetMethod()パブリック セッターを返します。ない場合は、 を返しますnull

プロパティはセッターとは異なる可視性を持つ可能性があるため、セッター メソッドの可視性によってフィルタリングする必要があります。

于 2011-09-26T17:25:49.127 に答える