代码方法名如下:
public T GetExecuteScalar<T>(string sql) where T : struct,string
我想把T限定为值类型和string类型,该怎么做,这样写编译器通不过,string那里有错误
------解决思路----------------------
编译错误很明白的告诉你了,不允许
然后不明白的是你约束返回值是想要做啥呢?
------解决思路----------------------
不行,其实你返回struct和string彼此之间根本没公共的东西,你没必要因为你想而去约束
------解决思路----------------------
有两个问题:
1. struct,string 这两个就冲突吧, 约束的两个是 and的关系,不是or的关系
System.String是从Object继承的,string类型的object不可能是Struct了。
2. string是一个sealed的class. 不能从它继承,如果约束成strring,就可以直接写成public string GetExecuteScalar(string sql)
string的定义:
public sealed class String : IComparable,
ICloneable, IConvertible, IComparable<string>, IEnumerable<char>,
IEnumerable, IEquatable<string>
------解决思路----------------------
作为约束的类型应该是基类,string型不能继承。
另外,struct和string本身类型就冲突。
c#泛型约束只能是接口,基类,结构,无参数构造函数这几类。
------解决思路----------------------
很遗憾,在目前的C#语法下没法做到这一点。
要么你放弃泛型,要么你自己对ValueType做一个包装,比如用Nullable<T>
------解决思路----------------------
string := System::String base System::Obejct
with struct 如果不报错,我跟着你姓了