c#10 语法特性

107 阅读1分钟

一、 属性拓展

创建实体类

    public class Student
    {
        public int Id { get; set; } = 24;

        public string Name { get; set; } = "xyy";


        public Address address { get; set; }
    }

    public class Address
    {
        public string position { get; set; }
    }

当一个类为 object 且要根据某个属性进行筛选时

object obj = new Student { 
    address = new Address
    {
        position = "anhui"
    }
};


if(obj is Student { address :{position:"anhui" } })
{
    Console.WriteLine("anhui");
}

二、 lambda 表达式改进

2.1 调用特性内的方法

自定义特性

  public class TestAttribute:Attribute
  {
      public void Show()
      {
          Console.WriteLine($"{this.GetType().FullName} was build.");
      }
  }

调用特性内的方法

var f1 = [TestAttribute] () =>{};
MethodInfo methodInfo = f1.GetMethodInfo();
TestAttribute testAttribute = methodInfo.GetCustomAttribute<TestAttribute>();
testAttribute.Show();

2.2 调用静态修饰的特性内方法

var f1 = [TestAttribute] static (int x) =>x;
MethodInfo methodInfo = f1.GetMethodInfo();
TestAttribute testAttribute = methodInfo.GetCustomAttribute<TestAttribute>();
testAttribute.Show();

2.3 调用有返回值的特性内方法

var f1 = [DoesNotReturn:TestAttribute] (int x) =>x;
ICustomAttributeProvider returnTypeCustomAttributes = f1.GetMethodInfo().ReturnTypeCustomAttributes;
object[] objects = returnTypeCustomAttributes.GetCustomAttributes(typeof(TestAttribute),true);
foreach(TestAttribute attrbute in objects)
{
    attrbute.Show();
}

三、 常数内插字符串

const string firstName = "f";
const string lastName = "l";
const string name = $"{firstName} {lastName}";