Execute/Reject dotnet core C#中基于海关属性值的函数
Execute/Reject function based on customs attribute value in dotnet core C#
我正在尝试学习 C# dotnet core 中的属性,所以我在下面写了 2 类。
Attribute class
:
using System;
namespace attribute
{
// [AttributeUsage(AttributeTargets.Class)]
[AttributeUsage(AttributeTargets.All)]
public class MyCustomAttribute : Attribute
{
public string SomeProperty { get; set; }
}
//[MyCustom(SomeProperty = "foo bar")]
public class Foo
{
[MyCustom(SomeProperty = "user")]
internal static void fn()
{
Console.WriteLine("hi");
}
}
}
Main class
:
using System;
using System.Reflection;
namespace attribute
{
public class Program
{
public static int Main(string[] args)
{
var customAttributes = (MyCustomAttribute[])typeof(Foo).GetTypeInfo().GetCustomAttributes(typeof(MyCustomAttribute), true);
if (customAttributes.Length > 0)
{
var myAttribute = customAttributes[0];
string value = myAttribute.SomeProperty;
// TODO: Do something with the value
Console.WriteLine(value);
if (value == "bar")
Foo.fn();
else
Console.WriteLine("Unauthorized");
}
return 0;
}
}
}
如果 MyCustomAttribute
中的 SomeProperty
元素等于 bar
,我需要执行函数 Foo.fn()
。
如果我将它应用到 class level
,我的代码可以正常工作,但不适用于 function level
重要提示
我对此很陌生,因此欢迎任何改进我的代码的建议或反馈。谢谢
您的解决方案是找到声明的方法并在该方法中找到属性。
var customAttributes = (MyCustomAttribute[])((typeof(Foo).GetTypeInfo())
.DeclaredMethods.Where(x => x.Name == "fn")
.FirstOrDefault())
.GetCustomAttributes(typeof(MyCustomAttribute), true);
我正在尝试学习 C# dotnet core 中的属性,所以我在下面写了 2 类。
Attribute class
:using System; namespace attribute { // [AttributeUsage(AttributeTargets.Class)] [AttributeUsage(AttributeTargets.All)] public class MyCustomAttribute : Attribute { public string SomeProperty { get; set; } } //[MyCustom(SomeProperty = "foo bar")] public class Foo { [MyCustom(SomeProperty = "user")] internal static void fn() { Console.WriteLine("hi"); } } }
Main class
:using System; using System.Reflection; namespace attribute { public class Program { public static int Main(string[] args) { var customAttributes = (MyCustomAttribute[])typeof(Foo).GetTypeInfo().GetCustomAttributes(typeof(MyCustomAttribute), true); if (customAttributes.Length > 0) { var myAttribute = customAttributes[0]; string value = myAttribute.SomeProperty; // TODO: Do something with the value Console.WriteLine(value); if (value == "bar") Foo.fn(); else Console.WriteLine("Unauthorized"); } return 0; } } }
如果 MyCustomAttribute
中的 SomeProperty
元素等于 bar
,我需要执行函数 Foo.fn()
。
如果我将它应用到 class level
,我的代码可以正常工作,但不适用于 function level
重要提示 我对此很陌生,因此欢迎任何改进我的代码的建议或反馈。谢谢
您的解决方案是找到声明的方法并在该方法中找到属性。
var customAttributes = (MyCustomAttribute[])((typeof(Foo).GetTypeInfo())
.DeclaredMethods.Where(x => x.Name == "fn")
.FirstOrDefault())
.GetCustomAttributes(typeof(MyCustomAttribute), true);