实现与 CompilerServices.CallerMemberAttribute 行为相似的属性
Implementing an attribute with similar behavior to CompilerServices.CallerMemberAttribute
可以创建一个行为类似于 CallerMemberNameAttribute
?
的属性
我的意思是,我用谷歌搜索并发现 this article,它说 CallerMemberName 是一个属于 CompilerServices 组的属性,或者换句话说,这个属性改变了编译器构建我的 IL 的方式。因此,如果不自定义 c# 编译器,就不可能复制此行为。
但我还不确定。我希望 Whosebug 中的某个人可以另外说。所以这个问题是为了它。
一些上下文:
我搜索这个主要是为了改进这段代码:
public int Prop
{
{ get { return (int)this["prop"]; }
{ set { this["prop"] = value; }
}
我的应用程序中有很多 类 是字典,并且有一个 属性 代表特定的键。
使用 StackTrace
(在 C# 4.0 中)和 CallerMemberName
(在 C# 5.0 中)我能够将我的代码更新为:
public int Prop
{
{ get { return Get(); }
{ set { Set(value); }
}
现在我的目标是像这样归档一些:
public int Prop { { [DicGet]get; [DicSet]set; } }
所以有人可以帮助我吗?可能吗?
It is possible to create an attribute that has a behavior similar to CallerMemberNameAttribute?
基本上只能自己更改 C# 编译器。毕竟,您要求的行为类似于 C# 编译器具有特定知识和代码来处理的行为 - 因此您应该期望 C# 编译器需要特定知识和代码来处理您的类似情况。
Now my goal is to archive some like this:
public int Prop { { [DicGet]get; [DicSet]set; } }
So can someone help me? It's possible?
不是开箱即用的,没有。
选项:
- 修改 Roslyn 编译器(现在是 open source)- 我不推荐这样做。
- 使用PostSharp
- 编译前使用某种预处理器
- 改为使用动态类型(例如扩展
DynamicObject
并以这种方式处理 属性 访问)
可以创建一个行为类似于 CallerMemberNameAttribute
?
我的意思是,我用谷歌搜索并发现 this article,它说 CallerMemberName 是一个属于 CompilerServices 组的属性,或者换句话说,这个属性改变了编译器构建我的 IL 的方式。因此,如果不自定义 c# 编译器,就不可能复制此行为。
但我还不确定。我希望 Whosebug 中的某个人可以另外说。所以这个问题是为了它。
一些上下文:
我搜索这个主要是为了改进这段代码:
public int Prop
{
{ get { return (int)this["prop"]; }
{ set { this["prop"] = value; }
}
我的应用程序中有很多 类 是字典,并且有一个 属性 代表特定的键。
使用 StackTrace
(在 C# 4.0 中)和 CallerMemberName
(在 C# 5.0 中)我能够将我的代码更新为:
public int Prop
{
{ get { return Get(); }
{ set { Set(value); }
}
现在我的目标是像这样归档一些:
public int Prop { { [DicGet]get; [DicSet]set; } }
所以有人可以帮助我吗?可能吗?
It is possible to create an attribute that has a behavior similar to CallerMemberNameAttribute?
基本上只能自己更改 C# 编译器。毕竟,您要求的行为类似于 C# 编译器具有特定知识和代码来处理的行为 - 因此您应该期望 C# 编译器需要特定知识和代码来处理您的类似情况。
Now my goal is to archive some like this:
public int Prop { { [DicGet]get; [DicSet]set; } }
So can someone help me? It's possible?
不是开箱即用的,没有。
选项:
- 修改 Roslyn 编译器(现在是 open source)- 我不推荐这样做。
- 使用PostSharp
- 编译前使用某种预处理器
- 改为使用动态类型(例如扩展
DynamicObject
并以这种方式处理 属性 访问)