C#学习教程:无法将类型’T’隐式转换为’Int’分享


无法将类型’T’隐式转换为’Int’

当我试图在我的代码中调用此函数时,我得到标题中的错误。 运算符’+ =’也不能应用于’int’和’T’类型的操作数

public int Change(Stats type, T value) { Dictionary temp = new Dictionary(); temp = sql.Query(string.Format("SELECT {0} FROM player WHERE fbId='{1}'", type.ToString(), FBId)); if (typeof(T) == typeof(int)) { int t = Convert.ToInt16(temp[type.ToString()]); t += value; if (t < 0) return -1; PlayerStats[type] = t; } sql.Upload(string.Format("UPDATE player SET {0}='{1}' WHERE fbId='{2}'", type.ToString(), PlayerStats[type], FBId)); return 0; } 

我用以下方法调用该函数:

 Change(type, 1); 

你可以尝试像这样投射价值……

 t += (int)value; 

要么

 t+= Convert.ToInt32(value); 

您可以设置约束:

 public int Change(Stats type, T value) where T : IConvertible 

然后:

 var intValue = value.ToInt32(); 

或者另一种方式(对象强制转换不是拼写错误)

t += (int)(object)value;

或者使用动态,通过使用动态可以做更多,例如隐式转换

或者使用Int32 – Int32和int都是内部结构。 没有性能损失

它不知道如何将T添加到数字中,因为它不知道T的类型是什么。

 t += Convert.ToInt32(value); 

但是既然你要将int添加到int并返回int那么为什么不放弃generics参数并制作它

 public int Change(Stats type, int value) 

如果你想要不同类型的不同行为,并且真的想要相同的方法名称,而不是测试类型,只需执行:

  public int Change(Stats type, string value) public int Change(Stats type, DateTime value) 

你得到的错误很快就会出现。 当您使用int作为类型调用方法时,编译器不会知道情况。

要按原样编译方法,编译器需要certificate您对T执行的操作对所有T都有效 – 显然不是这种情况。

上述就是C#学习教程:无法将类型’T’隐式转换为’Int’分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/1031782.html

发表评论

邮箱地址不会被公开。 必填项已用*标注