网站建设与管理实务,wordpress后台字体,静态网站制作wordpress模版,查企业的app软件有哪些免费1. 泛型约束#xff08;Generic Constraints#xff09;
在泛型类、接口或方法的定义中#xff0c;where关键字用于指定类型参数的约束。这些约束可以确保类型参数具有某些特定的属性。例如它是一个类、实现了某个接口、是另一个类型的派生类、具有无参构造函数等。
1.1 …1. 泛型约束Generic Constraints
在泛型类、接口或方法的定义中where关键字用于指定类型参数的约束。这些约束可以确保类型参数具有某些特定的属性。例如它是一个类、实现了某个接口、是另一个类型的派生类、具有无参构造函数等。
1.1 泛型约束条件表
约束名称详情Tstruct类型参数必须是值类型可指定除Nullable以外的任何值类型T: class类型参数必须是引用类型包括任何类、接口、委托或数组类型T: new()类型参数必须具有无参构造函数且访问保护等级为public当与其他约束一同使用时new()约束必须最后指定T: 基类名称类型参数必须是指定的基类或派生自指定的基类T:接口名称类型参数必须是指定的接口或实现指定的接口可指定多个接口约束接口约束也可是泛型
1.2 各约束条件使用代码示例
1.2.1 T: struct
public class MyClassT where T : struct
{ // 在这里T 必须是值类型 public void MyMethod(T item) { // ... }
}
1.2.2 T: class
public class MyClassT where T : class
{ // 在这里T 必须是引用类型 public void MyMethod(T item) { // ... }
}
1.2.3 T: new()
public class MyClassT where T : new()
{ //在这里T 必须具有无参构造函数//这个约束允许在泛型类内部创建类型参数类型的新实例public T CreateNewInstance() { return new T(); // 调用无参构造函数 }
}
1.2.4 T: 基类名称
public class BaseClass
{ // 基类成员 public void BaseMethod() { // ... }
} public class DerivedClass1 : BaseClass
{ // DerivedClass1特有的成员
} public class MyClassT where T : BaseClass
{ //在这里T 必须是指定的基类或派生自指定的基类// 泛型方法接受T类型的参数 public void MyMethod(T item) { item.BaseMethod(); // 调用基类的方法 // 这里可以添加更多逻辑针对T类型即BaseClass或其派生类 }
}
1.2.5 T: 接口名称
public interface IMyInterface
{ void MyInterfaceMethod();
} public class MyClassT where T : IMyInterface
{ //在这里T 必须是指定的接口或实现指定的接口public void UseInterfaceMethod(T item) { item.MyInterfaceMethod(); // 调用接口方法 }
}
1.2.6 组合约束
1.2.6.1 class 接口
public interface IMyInterface
{ void MyInterfaceMethod();
} public class MyClassT where T : class, IMyInterface
{ // 在这里T 必须是引用类型并实现IMyInterface接口 public void UseInterfaceMethod(T item) { item.MyInterfaceMethod(); // 调用接口方法 }
}
1.2.6.1 基类 具有无参构造
public class MyBaseClass
{ public MyBaseClass() { } // 无参构造函数
} public class MyClassT where T : MyBaseClass, new()
{ // 在这里T 必须是MyBaseClass或其派生类并且有一个无参构造函数 public T CreateNewInstance() { return new T(); // 调用无参构造函数 }
}
2. LINQ查询中的条件过滤
LINQLanguage Integrated Query----语言集成查询提供了一种强大的查询能力允许你以声明式的方式对集合如数组、列表等进行查询和操作。where关键字在LINQ查询中用于指定过滤条件以筛选出满足特定条件的元素。
示例查询列表中的元素
假设你有一个Person类包Name和Age属性
public class Person
{ public string Name { get; set; } public int Age { get; set; }
}
现在有Person对象的列表如果你想要找出所有年龄大于30岁的人你可以使用LINQ的where子句来实现
public class MyClass
{ public ListPerson people new ListPerson { new Person { Name 张三, Age 10 }, new Person { Name 李四, Age 20 }, new Person { Name 王五, Age 30 },new Person { Name 赵六, Age 40 },new Person { Name 随便, Age 50 },new Person { Name 编个名, Age 60 },new Person { Name V TheShow, Age 200 },}; var olderPeople from p in people where p.Age 50select p; public void WriteFilterPeople(){foreach (var person in olderPeople) { Console.WriteLine(person.Name is person.Age years old.); } }//或者使用Lambda表达式var olderPeopleLambda people.Where(p p.Age 50); public void WriteFilterPeopleLambda(){foreach (var person in olderPeopleLambda) { Console.WriteLine(person.Name is person.Age years old.); } }//上面的两种方式的输出均为/*编个名 is 60 years old.V TheShow is 200 years old.*/}