gpt4 book ai didi

c# - 是否可以确定负责在 C# 中构造属性的类型

转载 作者:太空宇宙 更新时间:2023-11-03 16:13:17 25 4
gpt4 key购买 nike

在用属性修饰的类型上调用 GetCustomAttributes() 之后调用属性构造函数。是否可以从构造函数中确定调用类型。我想做类似下面的事情并且不抛出它。

class Program
{
static void Main(string[] args)
{
var myAttributedClassType = typeof(MyAttributedClass);
var customAttributes = myAttributedClassType.GetCustomAttributes(false)
.OfType<MyAttribute>();
if (customAttributes.Any(x => x.CallingType != myAttributedClassType))
{
throw new Exception("MyAttribute.CallingType was incorrect.");
}
}
}

[AttributeUsage(AttributeTargets.Class)]
class MyAttribute : Attribute
{
public Type CallingType { get; set; }

public MyAttribute()
{
// magic to set CallingType goes here
}
}

[MyAttribute]
class MyAttributedClass { }

更新:

我知道这可以通过构造函数中的命名参数轻松完成

[MyAttribute(CallingType = typeof(MyAttributedClass)

或一个必需的参数

public MyAttributed(Type callingType)
{
CallingType = callingType; // this doesn't qualify as magic ;)
}

但希望有一种方法可以避免它,因为类型对象本身(我想要的值)是 GetCustomAttributes 的调用者

最佳答案

你的魔法,虽然不是真正的魔法:

[AttributeUsage(AttributeTargets.Class)]
class MyAttribute : Attribute
{
public Type CallingType { get; set; }

public MyAttribute(Type type)
{
// heres your magic
this.CallingType = type;
}
}

用法:

[MyAttribute(typeof(MyClass))]

关于c# - 是否可以确定负责在 C# 中构造属性的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16724341/

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