一、 属性拓展
创建实体类
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}";