簡體   English   中英

通過屬性值在對象實例上查找屬性

[英]Find a property on an object instance by it's attribute value

我有一個如下所示的DTO:

public class MyDto
{
    [MyAttribute("attribute1")]
    public string Property1 {get;set;}

    [MyAttribute("attribute2")]
    public string Property2 {get;set;}
}

如果我有string “ attribute1”,如何在MyDto實例中使用它來獲取Property1的值?

使用反射 不幸的是,無法從屬性獲取屬性:您必須遍歷每個屬性並檢查其屬性。

不是最可靠的代碼,但是請嘗試以下操作:

public class MyAttributeAttribute : Attribute
{
    public MyAttributeAttribute(string value)
    {
        Value=value;
    }
    public string Value { get; private set; }
}

public class MyDto
{
    [MyAttribute("attribute1")]
    public string Property1 { get; set; }

    [MyAttribute("attribute2")]
    public string Property2 { get; set; }
}

class Program
{
    static void Main(string[] args)
    {

        MyDto dto=new MyDto() { Property1="Value1", Property2="Value2" };

        string value=GetValueOf<string>(dto, "attribute1");
        // value = "Value1"
    }

    public static T GetValueOf<T>(MyDto dto, string description)
    {
        if(string.IsNullOrEmpty(description))
        {
            throw new InvalidOperationException();
        }
        var props=typeof(MyDto).GetProperties().ToArray();
        foreach(var prop in props)
        {
            var atts=prop.GetCustomAttributes(false);
            foreach(var att in atts)
            {
                if(att is MyAttributeAttribute)
                {
                    string value=(att as MyAttributeAttribute).Value;
                    if(description.Equals(value))
                    {
                        return (T)prop.GetValue(dto, null);
                    }
                }
            }
        }
        return default(T);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM