新手:: 无法将类型“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:

你这个leabletxt.Text的属性值类型是string类型的,
如果要把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”的主要内容,如果未能解决你的问题,请参考以下文章

无法将类型“int”隐式转换为 dbDataSet

无法将类型 double 隐式转换为 int

C# Unity 无法将浮点类型隐式转换为 int [关闭]

无法将类型“System.Linq.IQueryable<int>”隐式转换为“int?”

无法将float类型隐式转换为int。存在显式转换(您是否缺少演员表?)

编译器错误信息: CS0029: 无法将类型“int []”隐式转换为“string”