新手:: 无法将类型“int”隐式转换为“string”
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了新手:: 无法将类型“int”隐式转换为“string”相关的知识,希望对你有一定的参考价值。
源码
public partial class _Default : System.Web.UI.Page
protected void Page_Load(object sender, EventArgs e)
public void jiafa()
int x = 1;
int y = 2;
int qqq;
qqq = x + y;
leabletxt.Text = qqq;
编译器错误消息: CS0029: 无法将类型“int”隐式转换为“string”
源错误:
行 22: int qqq;
行 23: qqq = x + y;
行 24: leabletxt.Text = qqq;
行 25:
行 26:
如果要把qqq赋值给它的话必须先把 int 类型的qqq转换为string类型的qqq
如:leabletxt.Text=qqq.toString();
或:leabletxt.Text=Convert.toString(qqq);
或:leabletxt.Text=(string)qqq; 参考技术A 你的leabletxt.Text 是String类型的。
qqq是 int 类型的。
int 类型想转换为string类型 用 tostring();方法
你的代码这样写就可以了:
leabletxt.Text = qqq.ToString(); 参考技术B leabletxt.Text = qqq.ToString();
无法将类型“int”隐式转换为“short”[重复]
【中文标题】无法将类型“int”隐式转换为“short”[重复]【英文标题】:Cannot implicitly convert type 'int' to 'short' [duplicate] 【发布时间】:2011-08-18 10:59:03 【问题描述】:我写了以下小程序打印出斐波那契数列:
static void Main(string[] args)
Console.Write("Please give a value for n:");
Int16 n = Int16.Parse(Console.ReadLine());
Int16 firstNo = 0;
Int16 secondNo = 1;
Console.WriteLine(firstNo);
Console.WriteLine(secondNo);
for (Int16 i = 0; i < n; i++)
//Problem on this line
Int16 answer = firstNo + secondNo;
Console.WriteLine(answer);
firstNo = secondNo;
secondNo = answer;
Console.ReadLine();
编译消息是:
不能隐式转换类型'int' 太短'。显式转换 存在(您是否缺少演员表?)
既然涉及的所有内容都是 Int16(短),那么为什么要进行任何隐式转换?更具体地说,为什么在这里失败(而不是在最初将 int 分配给变量时)?
非常感谢您的解释。
【问题讨论】:
哪一行出错了?为什么你出于兴趣使用短裤? @Tom id 假设他在这一行有评论问题所在的行 相关:***.com/questions/1084668/… 我建议你直接使用 int 来代替,除非有很好的理由使用 Int16 我只是在使用Int16
进行实验,所以我可以看到序列再次开始(当Int16
的宽度不能再容纳太大的值时)
【参考方案1】:
在执行 add 函数时,Microsoft 会将您的 Int16
变量转换为 Int32
。
更改以下内容:
Int16 answer = firstNo + secondNo;
进入...
Int16 answer = (Int16)(firstNo + secondNo);
【讨论】:
令人困惑,为什么要这样设计?将两个Int64
加在一起时是否会导致问题(它们不适合Int32
的空间)?
多种原因,其他一些答案指向解释为什么的帖子。【参考方案2】:
加号运算符先将操作数转换为 int,然后再进行加法。所以结果是int。您需要将其显式转换回短,因为从“较长”类型到“较短”类型的转换是显式的,这样您就不会因隐式转换意外丢失数据。
至于为什么将int16强制转换为int,答案是,因为这是C# spec中定义的。而 C# 是这种方式是因为它被设计为与 CLR 的工作方式紧密匹配,而 CLR 只有 32/64 位算术而不是 16 位。 CLR 之上的其他语言可能会选择以不同的方式公开这一点。
【讨论】:
【参考方案3】:添加两个Int16
值会产生一个Int32
值。您必须将其转换为 Int16
:
Int16 answer = (Int16) (firstNo + secondNo);
您可以通过将所有号码切换为Int32
来避免此问题。
【讨论】:
【参考方案4】:线
Int16 answer = firstNo + secondNo;
被解释为
Int16 answer = (Int32) (firstNo + secondNo);
仅仅是因为没有 Int16 算术之类的东西。
简单的解决方案:不要不使用 Int16。使用 Int32 或简单地使用 int
。
int
是您的默认整数类型。 short 和 long 仅在特殊情况下使用。
【讨论】:
【参考方案5】:阅读 Eric Lippert 对这些问题的回答
Integer summing blues, short += short problem Unary minus on a short becomes an int?【讨论】:
【参考方案6】:两个Int16
变量相加的结果是Int32
:
Int16 i1 = 1;
Int16 i2 = 2;
var result = i1 + i2;
Console.WriteLine(result.GetType().Name);
它输出Int32
。
【讨论】:
【参考方案7】:这是因为两个Int16
相加的结果是Int32
。
在此处查看“转化”段落:http://msdn.microsoft.com/en-us/library/ybs77ex4%28v=vs.71%29.aspx
【讨论】:
【参考方案8】:问题是,正如其他人已经指出的那样,添加两个 Int16
会导致 Int32
。
您的第二个问题,为什么在这两个变量的声明中还没有出现这个问题在这里解释:http://msdn.microsoft.com/en-us/library/ybs77ex4%28v=VS.71%29.aspx:
short x = 32767;
在前面的声明中,整数文字 32767 隐式地从 int 转换为 short。如果整数文字不适合短存储位置,则会发生编译错误。
因此,它在您的声明中起作用的原因仅仅是因为已知所提供的文字适合 short
。
【讨论】:
【参考方案9】:出于某种奇怪的原因,您可以使用 += 运算符来添加短裤。
short answer = 0;
short firstNo = 1;
short secondNo = 2;
answer += firstNo;
answer += secondNo;
【讨论】:
以上是关于新手:: 无法将类型“int”隐式转换为“string”的主要内容,如果未能解决你的问题,请参考以下文章
C# Unity 无法将浮点类型隐式转换为 int [关闭]
无法将类型“System.Linq.IQueryable<int>”隐式转换为“int?”