私は、このような SO に関する多くの質問があることを知っています
"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 でリリースされる時期を知りたいです (私が知る限り、まだベータ段階ですよね?) これらの問題は処理されますか? それとも、ジェネリックの使用に関して非常に多くの制限が残っているのでしょうか?