(C#) 如class Demo<T,V> where T:这里如何约束T只能是枚举类型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(C#) 如class Demo<T,V> where T:这里如何约束T只能是枚举类型相关的知识,希望对你有一定的参考价值。
如题,要对T进行类型约束
因为enum是值类型,而所有的值类型都是sealed,所以都不能进行约束。但是,若要限制参数为值类型,可用struct 约束。另一方面,这个 struct约束并不能满足你的要求,因为他只能限制当前的类型为 值 类型,但是是哪种值类型却不得而知,你可以楼上的方法进行二次判断。 参考技术A 很可惜泛型不支持枚举型,你可以通过以下方法判断是否枚举: if (!typeof(T).IsEnum)
throw new Exception();
c# 泛型study
1.引用类型约束: 类型实参包含任何类,接口,数组,委托,或者是已知是引用类型的另一个类型参数
class demo<T> where T:class
有效的封闭区间demo<String>;demo<int[]>;demo<person>;demo<IDisposable>
无效的封闭区间demo<int>
2.值类型约束:包含值类型,包括枚举 enum。但是他将可空类型排除在外int?
class demo<T>where T:struct
有效的封闭区间demo<int>; demo<enumDemo>
无效的封闭区间demo<int[]> ;demo<object> ;demo<StringBuild>
3.构造函数类型约束:无参构造函数约束
泛型方法demo
Public T demo<T>() where T:new()
return T()
4 转换类型约束:类型实参必须可以通过一致性,引用或者装箱转换隐式的转换成该类型
class demo<T> where T:int
demo<int> ;一致性转换
class demo<T> where T:IDisposable
demo<SqlConnection> 引用转换
public class demo<T> where T:IComparable<T>
demo<int> demo<float> 装箱转换
class demo<T,U> where T:U
demo<int,IComparable> 装箱转换
可以指定多个接口但是只能指定一个类
class demo<T> where T:IComparable<int>,Stream,IDisposable
5.组合约束:没有任何类型既是引用类型又是值类型的,所以这种 这种组合是禁止的
已经约束为值类型那么就不能再约束 new()
如果是转换类型约束 其中一个是类的话那么就要放在接口前面,而且我们不能多次指定同一个接口。
有效约束: class demo<T> where T:class,new()
class demo<T> where T:Struct,IDisposable
class demo<T,U> where T :class where U :struct
以上是关于(C#) 如class Demo<T,V> where T:这里如何约束T只能是枚举类型的主要内容,如果未能解决你的问题,请参考以下文章
在 Typescript 中,有没有办法将一个类写成一个数组,所以我可以做 class[i],就像 C# 中的 List<T>