当前位置: 代码迷 >> C# >> C# 泛型参数约束替struct与string
  详细解决方案

C# 泛型参数约束替struct与string

热度:133   发布时间:2016-05-05 05:00:36.0
C# 泛型参数约束为struct与string
代码方法名如下:
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 如果不报错,我跟着你姓了
  相关解决方案