我知道有很多这样的问题
"Operator 'whatever' cannot be applied to operands of type 'T'
(可能是 ++、+= 或 <= 等等等。但请耐心等待,我想问一些不同的问题。
假设我有这个代码
public class GenericCls<T> where T : struct
{
public static T AddValues(params T[] values)
{
T sum = default(T);
if (values != null)
{
for (int i = 0; i < values.Length; i++)
{
sum += values[i];
}
}
return sum;
}
}
即使我已经制作了我的类型结构和值类型,我也得到了错误
Operator '+=' cannot be applied to operands of type 'T' and 'T'
如果我尝试变得微妙并应用 ValueType 约束,它会说
Constraint cannot be special class 'System.ValueType'
如果我尝试将 for 循环中的参数转换为类型 T,然后执行此操作..
public class GenericCls<T> where T : struct, IComparable<T>, IEquatable<T>
{
public static T AddValues(params T[] values)
{
T sum = default(T);
if (values != null)
{
for (T i = default(T); i < values.Length; i++)
{
sum += values[i];
}
}
return sum;
}
}
我仍然收到错误
Operator '<' cannot be applied to operands of type 'T' and 'int'
Operator '++' cannot be applied to operand of type 'T'
Cannot implicitly convert type 'T' to 'int'
无论如何,我无法让它工作。我正在使用 VS2010(C# 4.0、.NET 4.0)。所以我想知道 C# 5.0 何时最终与 VS2012 一起发布(据我所知它们仍处于 beta 阶段,对吗?)它会解决这些问题吗?还是我们再次对泛型的使用有如此多的限制?