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#做这件事的答案,我会勾选你的答案。谢谢