首页 > 其他分享 >泛型类型参数约束2 - 枚举作为约束类型

泛型类型参数约束2 - 枚举作为约束类型

时间:2024-04-10 14:29:32浏览次数:17  
标签:boy Gender 成员 Enum 约束 类型 枚举 泛型

先复习下枚举的相关基础知识:

枚举类型(Enum Type)说明

枚举只有一种成员:命名的整型常量的集合

枚举是值类型

使用枚举有效地防止用户提供无效值,使代码更加清晰

定义枚举:

注意:

​ 枚举成员不可以使用修饰符

​ 每个枚举成员底层都是一个常量值

​ 默认情况下,枚举成员的类型是int

​ 默认情况下,编译器把第一个成员赋值为0,后一个成员在前一个成员基础上加1

Enum类型中还可以使用一些有用的静态方法:

GetName方法以枚举类型和整数为参数,返回枚举成员名称

GetNames方法以枚举类型为参数,返回枚举中所有成员的名称,字符串数组

GetValues方法以枚举类型为参数,返回枚举中所有成员的值,返回Array,可以强转成自定义的枚举类型数组或int[].

enum Gender
{
    boy=1,
    girl=2,
    ladyboy=3
}

以下是枚举常用的方法:

//Gender是枚举类型,而boy是Gender类型的常量
Gender boy = Gender.boy;
//根据枚举类型获取指定枚举成员的名称,返回字符串
string singleElementName = Enum.GetName(typeof(Gender),2);
//根据枚举类型获取所有枚举成员的名称,返回字符串数组
string[] Name_AllElements = Enum.GetNames(typeof(Gender));
//根据枚举类型获取指定枚举成员的值,返回Array
Array vals = Enum.GetValues(typeof(Gender));
//将枚举所有成员的值转成Gender类型数组
gender[] values = (Gender[])vals;
//将枚举所有成员的值转成int类型数组
int[] values1 = (int[])vals;
//t1,t2相等
Type t1 = gender.boy.GetType();
Type t2 = typeof(Gender);

C# 7.3版本以后,可以将枚举类型作为泛型类型参数的约束类型,如下demo:

public class MyEnumClass
{
    public string M<T>(T t) where T : Enum
    {
        return Enum.GetName(t.GetType(),t);
    }
}

调用泛型方法如下,即可以返回枚举成员的名称了!

//调用泛型方法,获取指定枚举成员的名称
 string genderElementName_girl = new MyEnumClass().M<Gender>(Gender.girl);

标签:boy,Gender,成员,Enum,约束,类型,枚举,泛型
From: https://blog.csdn.net/weixin_44279482/article/details/137557094

相关文章

  • 集合和泛型
    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;//ArrayList的简单例子usingSystem.Collections;//引用集合的命名空间namespaceArryList的简单例子{classProgram{staticvoidMain(string[]args)......
  • 数据结构复习-01enum枚举类型
    enum枚举类型语法:enum Nanme{name1=number1,name2=number2,};举例:enumDay{mon=1;tue=2;};enumDayday=mon;printf("dayis%d",day);输出:注意事项:1.若枚举类型中的首个元素未定义则默认为0 2.枚举类型的非首元素的默认值为......
  • 关于差分约束的一切
    观前须知笔者的博客主页声明本文使用CCBY-NC-SA4.0许可。本文为笔者在OI学习中的复习向学习笔记。部分内容会比较简略。如有好的习题会不断补充。知识简介差分约束解决这样一类问题:给定一个n元一次不等式组,让你求出一组解/判定是否有解/算出某个数的最值/算出和......
  • 排列型枚举(全排列)
    0.简介在排列型枚举中,我们从给定的元素集合中选择出若干个元素的所有可能排列,这些排列考虑了元素的顺序.1.代码模板#include<bits/stdc++.h>usingnamespacestd;intn;intorder[20];boolchosen[20];//x代表当前选择位voidDFS(intx){ //选满了 if(x==n+1......
  • 【C语言】:枚举和联合体
    这里写自定义目录标题1、枚举1.1枚举类型的声明1.2枚举类型的优点1.3枚举类型的使用2、联合体(共用体)2.1联合体类型的声明2.2联合体的特点2.3联合体大小的计算1、枚举1.1枚举类型的声明枚举顾名思义就是⼀⼀列举,把可能的取值⼀⼀列举。⼀周的星期⼀到星期⽇......
  • 小红不想做莫比乌斯反演杜教筛求因子和的前缀和(枚举)--牛客周赛 Round 39-E
    #include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#defineendl'\n'#defineinf1e18constintmod=1e9+7;constintN=2e5+5;intn,m,p,x;voidsolve(){ cin>>n>>m>>p>>x; intans=0; for(inti=1;i&......
  • 接口和枚举在方法中的区别
    枚举类型较传统定义常量的方式,除了具有参数类型检测的优势之外,还具有其他方面的优势。用户可以将一个枚举类型看作是一个类,它继承于java.lang.Enum类,当定义一个枚举类型时,每一个枚举类型成员都可以看作是枚举类型的一个实例,这些枚举类型成员都默认被final、public、static......
  • swagger文档枚举类型描述
    背景:问题:使用swagger作为api文档,但文档中的枚举类型仅显示枚举name,对于使用文档的人员来讲不容易理解解决思路:枚举类型加上自定义的描述解决方案maven配置<dependency><groupId>io.swagger.core.v3</groupId><artifactId>swagger-models-j......
  • [蓝桥杯 2022 国 B] 齿轮(优化枚举)
        根据题目描述,如果采用dfs暴力做法枚举所有方案,肯定会超时,因此我们需要优化枚举,我们都知道在同一组共同转动的齿轮中,线速度相等,因此角速度的比值就是半径的反比,因此我们只需要找到对于每个齿轮作为起始齿轮,只需要找到其倍数半径是否存在即可,而倍数上限就是假设存在......
  • [蓝桥杯 2021 省 B] 杨辉三角形(二分查找+枚举)
        我们之前学过有关杨辉三角的一些性质,我们知道杨辉三角某个数等于左上和右上两个数相加,但是如果我们按照这个性质依次枚举每行每列,就会很容易超时,因此我们可以枚举列,再二分查找行来寻找满足要求的答案,我们可以先将列数到30,基本涵盖了所有的答案,通过组合数性质来二......