Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改具有属性的方法的返回值_C#_Custom Attributes - Fatal编程技术网

C# 更改具有属性的方法的返回值

C# 更改具有属性的方法的返回值,c#,custom-attributes,C#,Custom Attributes,我想要一个这样的类(伪代码): 现在,我希望我的[CheckValid]属性检查是否有效属性,如果为真,则允许执行DoSomething(),如果为假,则使DoSomething()返回默认值(int)(或者至少使DoSomething()中的代码不可执行)这不是C#的一个特性:属性不会这样执行。然而,也有类似的扩展框架允许这样做——基本上它在IL级别重写代码以注入功能,通常基于属性。但这需要额外的工具 在C#“开箱即用”中,您最好的选择是: public int DoSomething() {

我想要一个这样的类(伪代码):

现在,我希望我的
[CheckValid]
属性检查
是否有效
属性,如果为真,则允许执行
DoSomething()
,如果为假,则使
DoSomething()
返回
默认值(int)
(或者至少使
DoSomething()
中的代码不可执行)

这不是C#的一个特性:属性不会这样执行。然而,也有类似的扩展框架允许这样做——基本上它在IL级别重写代码以注入功能,通常基于属性。但这需要额外的工具

在C#“开箱即用”中,您最好的选择是:

public int DoSomething() {
    CheckValid(); // might throw an exception
    return 1;
}

只有在检查属性时(即通过反射)才会对其进行评估,因此我认为这是不可能的。您是否查看过策略注入?那么标准内置的
[Authorize]
属性是如何工作的?我想要相同的功能,但需要我自己的代码。@ojek这些功能可以工作,因为它们应用的框架(MVC等)通过反射显式地检查这些属性,并直接调用它们的代码。这不是一种语言功能。@ojek是一个人类示例:如果我在一个粘性标签上写下“请勿打开”,并将该标签粘贴到一个盒子上:这不会阻止任何人打开盒子。只有当一些人不厌其烦地寻找标签、阅读标签上的内容并遵循标签上的内容时,它才有用。在像MVC这样的框架中,是框架在选择代表您执行操作之前执行所有这些检查。
public int DoSomething() {
    CheckValid(); // might throw an exception
    return 1;
}