gpt4 book ai didi

c# - 从自定义属性装饰属性中获取值(value)?

转载 作者:可可西里 更新时间:2023-11-01 08:23:02 24 4
gpt4 key购买 nike

我已经编写了一个自定义属性,用于某个类的某些成员:

public class Dummy
{
[MyAttribute]
public string Foo { get; set; }

[MyAttribute]
public int Bar { get; set; }
}

我能够从类型中获取自定义属性并找到我的特定属性。我不知道该怎么做是获取分配的属性的值。当我获取 Dummy 的实例并将其(作为对象)传递给我的方法时,我如何获取从 .GetProperties() 返回的 PropertyInfo 对象并获取分配给 .Foo 和 .Bar 的值?

编辑:

我的问题是我不知道如何正确调用 GetValue。

void TestMethod (object o)
{
Type t = o.GetType();

var props = t.GetProperties();
foreach (var prop in props)
{
var propattr = prop.GetCustomAttributes(false);

object attr = (from row in propattr where row.GetType() == typeof(MyAttribute) select row).First();
if (attr == null)
continue;

MyAttribute myattr = (MyAttribute)attr;

var value = prop.GetValue(prop, null);
}
}

但是,当我这样做时,prop.GetValue 调用会给我一个 TargetException - 对象与目标类型不匹配。我如何构造此调用以获得此值?

最佳答案

您需要将对象本身传递给 GetValue,而不是属性对象:

var value = prop.GetValue(o, null);

还有一件事 - 你不应该使用 .First(),而应该使用 .FirstOrDefault(),因为如果某些属性不包含任何属性,你的代码将抛出异常:

object attr = (from row in propattr 
where row.GetType() == typeof(MyAttribute)
select row)
.FirstOrDefault();

关于c# - 从自定义属性装饰属性中获取值(value)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4893137/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com