标签: .net-attributes

真实世界使用自定义.NET属性

在现实世界中,您使用自定义.NET属性的是什么类型的东西?

我已经阅读了几篇关于它们的文章,但我从未使用过自定义属性.

我觉得当它们有用时我可能会忽略它们.

我在谈论您创建的属性,而不是已经包含在框架中的属性.

.net attributes custom-attributes class-attributes .net-attributes

8
推荐指数
2
解决办法
1594
查看次数

使用params object []构造函数的属性会产生不一致的编译器错误

我收到了错误

属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式

请注意下面的截图:

在此输入图像描述

请注意,如果我将DataRow属性与一个或三个参数一起使用,则不会出现编译错误.但是如果我使用两个参数而第二个参数是一个字符串数组,那么我确实会遇到编译错误.

DataRowAttribute的签名是public DataRowAttribute (object data1);public DataRowAttribute (object data1, params object[] moreData);

第一个给了我没问题,但第二个似乎变得困惑.

我认为params object[]可能会引起一些混乱.也许它无法确定我的意思[DataRow(new[] { 1 }, new[] { "1" })]还是[DataRow(new[] { 1 }, "1")]

为了解决这个问题,我尝试将第二个属性转换为object([DataRow(new[] { 1 }, (object)new[] { "1" })]),但错误没有消失,它警告我演员阵容是多余的.我也尝试明确指定数组的类型,但这也没有帮助.

我可以添加第三个虚拟参数,即使null似乎解决了这个问题,但这只是一种解决方法.这样做的正确方法是什么?

c# .net-attributes

8
推荐指数
2
解决办法
505
查看次数

C# .NET 中的“模块”关键字是什么?

我正在学习 C# 并遇到了关键字module. 我想知道moduleC# 中的this关键字是什么以及它有什么用处。例如,考虑以下代码:

[module: Test]
public class TestAttribute : Attribute
{
}
Run Code Online (Sandbox Code Playgroud)

.net c# fody .net-attributes

6
推荐指数
1
解决办法
319
查看次数

[Something]和[SomethingAttribute]之间有什么区别?

这可能已经被问到了,但很难找到.

[Something]和之间有什么区别[SomethingAttribute]

以下两个编译:

[DefaultValue(false)]
public bool Something { get; set; }
Run Code Online (Sandbox Code Playgroud)
[DefaultValueAttribute(false)]
public bool SomethingElse { get; set; }
Run Code Online (Sandbox Code Playgroud)

除了外观之外,它们之间是否有任何差异?它们使用的一般准则是什么?

c# .net-attributes

5
推荐指数
2
解决办法
167
查看次数

ResolutionGroupName和多个效果

我创建了一个名为Effects的文件夹,其中应包含项目的所有效果。归因于以下因素,它具有一种作用:

[assembly: ResolutionGroupName("Effects")]
[assembly: ExportEffect(typeof(SomeProject.iOS.Effects.SliderEffect), "SliderEffect")]
Run Code Online (Sandbox Code Playgroud)

现在,我想添加另一个具有相同效果的效果(作为单独的文件)ResolutionGroupName,但是我得到了

重复的“ ResolutionGroupName”属性

我的理解

请注意,每个项目只能应用一次此属性。

标识组名称(通常是公司名称或反向的公司URL)的属性,该名称提供了效果名称的范围。

,但是如何在单独的文件中使用多种效果?我发现的所有示例仅使用一种效果...

effects xamarin xamarin.forms .net-attributes

5
推荐指数
1
解决办法
1712
查看次数

[ApiController] 属性有什么作用?

我注意到是否使用此属性是一样的。我错了吗?

举个例子:

[Route("[controller]")]
[ApiController]
public class DataTablesController: ControllerBase
{
    [HttpGet]
    public IActionResult Test()
    {
        return Ok("test");
    }
}
Run Code Online (Sandbox Code Playgroud)

当我删除该[ApiController]属性时什么也没发生。

在微软的文档中,我找到了这样的解释:

指示类型和所有派生类型用于提供 HTTP API 响应。
使用此属性修饰的控制器配置了旨在改善开发人员构建 API 体验的功能和行为。
在程序集中装饰时,程序集中的所有控制器都将被视为具有 API 行为的控制器。

什么是 API 行为?我们为什么要使用它?

c# controller asp.net-apicontroller .net-attributes asp.net-core

5
推荐指数
1
解决办法
969
查看次数

属性中的名称

考虑到Myatt属性和MyObj类,ObjName属性在Myatt属性范围内是已知的,这有点奇怪。不是吗?

[AttributeUsage(AttributeTargets.Property)]
public class MyAtt : Attribute
{
    public MyAtt(string name)
    {
        this.Name = name;
    }

    public string Name
    {
        get; set;
    }
}

public class MyObj
{
    [MyAtt(nameof(ObjName))] //Can access to ObjName?!
    public int ObjID
    {
        get;
        set;
    }

    public string ObjName
    {
        get;
        set;
    }
}
Run Code Online (Sandbox Code Playgroud)

更新 :

抱歉,我想知道为什么第一种情况是不可能的,而第二种情况是可能的。

1. [MyAtt(nameof(this.ObjName))] 
2. [MyAtt(nameof(ObjName))] 
Run Code Online (Sandbox Code Playgroud)

我现在明白了。谢谢。

c# .net-attributes nameof

3
推荐指数
1
解决办法
2437
查看次数

属性名称作为属性构造函数的输入

我有一个自定义属性,我希望它具有一个属性名称作为输入。因为名称是一个字符串,所以它是一种有效的输入类型(因为属性对于其作为构造函数的输入的限制非常有限)。但是我该怎么做呢?

请看以下示例代码:

public class MyCustomAttribute : Attribute {
    public MyCustomAttribute(string propertyName) {}
}

public class Foo {
    public bool MyCustomProperty { get; set; }

    [MyCustom(SomeMagicAppliedToMyCustomProperty)] // I want the attribute to receive something along the lines of "Foo.MyCustomProperty"
    public void Bar();
}
Run Code Online (Sandbox Code Playgroud)

如何限制属性可以在其构造函数中接收的内容来完成此操作?

.net c# .net-attributes

2
推荐指数
1
解决办法
2287
查看次数