0

特定のランタイム型に、次のような特定の属性を持つプロパティが含まれているかどうかを確認したい:

    public void Audit(MongoStorableObject oldVersion, MongoStorableObject newVersion)
    {
        if(oldVersion.GetType() != newVersion.GetType())
        {
            throw new ArgumentException("Can't Audit versions of different Types");
        }
        foreach(var i in oldVersion.GetType().GetProperties())
        {
            //The statement in here is not valid, how can I achieve look up of a particular attribute
            if (i.GetCustomAttributes().Contains<Attribute>(MongoDB.Bson.Serialization.Attributes.BsonIgnoreAttribute)) continue;
            //else do some actual auditing work
        }
    }

しかし、ステートメントは有効ではありません。このようなプロパティで特定の属性を検索する方法を教えてください。ありがとう、

アップデート:

インテリセンスに文句を言わせないこれを見つけました:

if (i.GetCustomAttributes((new MongoDB.Bson.Serialization.Attributes.BsonIgnoreAttribute()).GetType(),false).Length > 0) continue;

しかし、これが私が望むことをするかどうかはまだわかりません。

4

2 に答える 2

1

変化する:

 if (i.GetCustomAttributes().Contains<Attribute>(MongoDB.Bson.Serialization.Attributes.BsonIgnoreAttribute)) continue;

if (i.GetCustomAttributes().Any(x=> x is MongoDB.Bson.Serialization.Attributes.BsonIgnoreAttribute)) continue; 

改訂:

public void Audit(MongoStorableObject oldVersion, MongoStorableObject newVersion)
    {
        if(oldVersion.GetType() != newVersion.GetType())
        {
            throw new ArgumentException("Can't Audit versions of different Types");
        }
        foreach(var i in oldVersion.GetType().GetProperties())
        {
            //The statement in here is not valid, how can I achieve look up of a particular attribute
             if (i.GetCustomAttributes().Any(x=> x is MongoDB.Bson.Serialization.Attributes.BsonIgnoreAttribute)) continue;
            //else do some actual auditing work
        }
    }

明確にするために:

GetCustomAttributes()は、プロパティの属性オブジェクトのリストを返します。それらを反復処理し、それらのタイプのいずれかがBsonIgnoreAttributeであるかどうかを確認する必要があります。

于 2012-09-07T08:53:26.207 に答える
0
private static void PrintAuthorInfo(System.Type t)
{
    System.Console.WriteLine("Author information for {0}", t);

    // Using reflection.
    System.Attribute[] attrs = System.Attribute.GetCustomAttributes(t);  // Reflection. 

    // Displaying output. 
    foreach (System.Attribute attr in attrs)
    {
        if (attr is Author)
        {
            Author a = (Author)attr;
            System.Console.WriteLine("   {0}, version {1:f}", a.GetName(), a.version);
        }
    }
}

http://msdn.microsoft.com/en-us/library/z919e8tw.aspx

于 2012-09-07T08:52:08.543 に答える