gpt4 book ai didi

c# - 创建规则以对参数属性强制执行默认值

转载 作者:行者123 更新时间:2023-11-30 21:42:36 25 4
gpt4 key购买 nike

我正在查看 CallerMemberName 属性。当您指定这样的方法时

public void TraceInfo(string propertyName, [CallerMemberName] string memberName)  

我们得到一个编译时错误说明

Parameter with caller info must have a default value

CallerMemberName 属性是密封的,我想像此类一样强制使用默认参数

如何在常规属性类上实现相同的默认策略?

[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
public sealed class DefaultEnforcedAttribute : Attribute
{
public DefaultEnforcedAttribute()
{
}
}

最佳答案

[CallerMemberName] 属性的参数必须是可选的。这允许您在调用方法时省略此参数。然后 C# 将自动用调用方成员名称填充此参数。

public void TraceInfo(string propertyName, [CallerMemberName] string memberName = null) 

您不能在编译时强制执行此规则,因为这会涉及一些编译器魔术,但您可以在属性的代码中(例如在静态构造函数中)进行一些反射。您将不得不枚举类型及其方法。

是这样的:

var faultyProps = assembly.GetTypes()
.SelectMany(t => t.GetMethods())
.SelectMany(m => m.GetParameters())
.Where(p => p.GetCustomAttribute<DefaultEnforcedAttribute>() != null && !p.IsOptional);

关于c# - 创建规则以对参数属性强制执行默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42425597/

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