gpt4 book ai didi

c# - 限制方法/构造函数中的 'Type' 参数

转载 作者:行者123 更新时间:2023-11-30 17:33:49 24 4
gpt4 key购买 nike

我想将 Type 参数传递给构造函数。此构造函数属于一个属性。

这很简单。但是,如何将此 Type 参数限制为仅特定类的子类?

所以我有一个父类 ParentClass 和两个子类 MyChildClass : ParentClassMyOtherChildClass : ParentClass

我的属性如下所示:

public class AssociatedTypeAttribute : Attribute
{
private readonly Type _associatedType;

public Type AssociatedType => _associatedType;

public AssociatedTypeAttribute(Type associatedType)
{
if (!associatedType.IsSubclassOf(typeof(ParentClass)))
throw new ArgumentException($"Specified type must be a {nameof(Parentclass)}, {associatedType.Name} is not.");

_associatedType = associatedType;
}
}

这有效,如果类型不是 ParentClass,它会在运行时抛出异常 - 但运行时为时已晚。

是否可以添加某种约束?我可以在这里使用泛型,还是我说泛型越界是正确的,因为它是属性的构造函数?

注意用法:

public enum MyEnum
{
[AssociatedType(typeof(MyChildClass))]
MyEnumValue,
[AssociatedType(typeof(MyOtherChildClass))]
MyOtherEnumValue
}

最佳答案

您不能使用 Type 执行此操作,也不能使用泛型,因为不允许使用泛型类扩展 Attribute

您拥有的最佳解决方案是运行时检查,如果目标与预期目标不匹配,则简单地忽略该属性。

关于c# - 限制方法/构造函数中的 'Type' 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43236399/

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