1

明確にするために、小さな例:

public class Book
{
    [MyAttrib(isListed = true)]
    public string Name;

    [MyAttrib(isListed = false)]
    public DateTime ReleaseDate;

    [MyAttrib(isListed = true)]
    public int PagesNumber;

    [MyAttrib(isListed = false)]
    public float Price;
}

isListed問題は、boolパラメータが設定さtrueれているプロパティのみを取得するにはどうすればよいMyAttribですか?

これは私が得たものです:

PropertyInfo[] myProps = myBookInstance.
                         GetType().
                         GetProperties().
                         Where(x => (x.GetCustomAttributes(typeof(MyAttrib), false).Length > 0)).ToArray();

myPropsからすべてのプロパティを取得しましたが、パラメータがfalseを返しBookたときに、それらを除外する方法がわかりません。isListed

foreach (PropertyInfo prop in myProps)
{
    object[] attribs = myProps.GetCustomAttributes(false);

    foreach (object att in attribs)
    {
        MyAttrib myAtt = att as MyAttrib;

        if (myAtt != null)
        {
            if (myAtt.isListed.Equals(false))
            {
                // if is true, should I add this property to another PropertyInfo[]?
                // is there any way to filter?
            }
        }
    }
}

どんな提案も非常に高く評価されます。前もって感謝します。

4

1 に答える 1

4

Linqのクエリ構文を使用する方が少し簡単だと思います。

var propList = 
    from prop in myBookInstance.GetType()
                               .GetProperties()
    let attrib = prop.GetCustomAttributes(typeof(MyAttrib), false)
                     .Cast<MyAttrib>()
                     .FirstOrDefault()
    where attrib != null && attrib.isListed
    select prop;
于 2013-03-21T03:39:48.857 に答える