C# 拦截具有属性的属性分配
是否可以在属性上放置一个属性来拦截对该属性的赋值调用 我将如何使用它的一个示例是,当用户分配C# 拦截具有属性的属性分配,c#,attributes,C#,Attributes,是否可以在属性上放置一个属性来拦截对该属性的赋值调用 我将如何使用它的一个示例是,当用户分配null时,使其上带有此属性的字符串属性设置为string.Empty 我相信像这样的东西还有很多其他可能的用途,但目前这正是我在寻找的 编辑: 例如: class A { [NotNullableString] public string SomeString { get; set; } } 而NotNullableStringAttribute将检查集合的输入值,如果为空,则将其替换
null
时,使其上带有此属性的字符串属性设置为string.Empty
我相信像这样的东西还有很多其他可能的用途,但目前这正是我在寻找的
编辑:
例如:
class A
{
[NotNullableString]
public string SomeString { get; set; }
}
而
NotNullableStringAttribute
将检查集合的输入值,如果为空,则将其替换为string.Empty
。如果要使用C属性执行此操作,则需要使用IL编织
最流行的库是PostSharp:express版本是免费的:如果您坚持工作流中没有后期构建步骤,并且您可以使用属性,那么答案是目前不可能 为什么不在setter中检查null并将其设置为string.Emptyor在Get()@cheedep中检查null这将涉及代码重复,但更重要的是,它的可读性/明显性稍差。此外,我将无法为属性使用默认的set
或get
。代码重复?它可能会为您节省一行额外的代码。在我看来,这并没有让它更具可读性。postsharp是免费使用的吗?@David nope。在answerI中提到过,我正在寻找一种无插件的方式来实现这一点。如果没有,那么我可以实现这一目标。@BASarat,感谢您将我重定向到express/free版本!干得好@现在我明白了。所以PostSharp改变了IL。漂亮。是的,我可以用它来做我想做的事。如果我不能得到一个关于如何用纯C#做这件事的答案,我会勾选你的答案。谢谢