【问题标题】:I get an error cannot implicity convert type int? to int. An expicit conversion exists (are you missing a cast?) [duplicate]我得到一个错误,不能隐式转换 int 类型?诠释。存在显式转换(您是否缺少演员表?)[重复]
【发布时间】:2020-05-12 14:24:52
【问题描述】:

我对此并不陌生,但这来自一个表单,用户选择他们想要生成多少个数字,然后输入他们的起始数字范围,代码应该从那里获取数字的校验位,然后创建其他数字类似的方式

     private void button1_Click(object sender, EventArgs e)
          {
            using (StreamWriter objWriter = new StreamWriter("C:\\temp\\Test.txt"))
            {
             int numpins = int.Parse(textBox1.Text); //creates a number counter for input
             string basepin = textBox2.Text; //user is going to input how many numbers to create
             int pinlength = basepin.Length;
             string formatspecifier = "{0:d" + pinlength.ToString() + "}";
             long pinnumber = long.Parse(basepin);

             for (int d = 0; d < numpins; d++)
                {
                GetCheckDigit(dig);//Calling the function here
                basepin = string.Format(formatspecifier, pinnumber);
                objWriter.WriteLine(basepin);
                pinnumber++;
                }

                objWriter.Close();
                }

              }

这里是函数

  private static string GetCheckDigit(string dig)
       {
        var sum = 0;
        var result = true;
        var digits = dig?.ToCharArray();
        for (int? i = digits?.Length - 1; i >= 0; i--)
            {
             var num = digits[i]- 48; //the error is here (digits[i])
                if (result)
                {
                    num *= 2;
                    if (num > 9)
                        num -= 9;
                }
                sum += num;
                result = !result;
            }
            if ((sum % 10) == 0)
            {
                return "0";
            }
            return (10 - (sum % 10)).ToString();

        }

【问题讨论】:

  • 使用可空类型的Value属性
  • 嗯,错误很明显,int? 不是int - 虽然老实说循环已经是一个奇怪的开始,但你没有任何“备份计划”以防digitsnull
  • 基本上:int? 可以是nullint 不能使您的 ia 成为常规 int,并在将其拼接成之前对 dig 使用空检查一个数组。
  • 感谢删除所有“?”带走了这些错误,但现在我有一个新错误。 var 数字 = dig.ToCharArray();未设置到对象实例的对象引用 dig 为空。我还没有检查 dig 是否为空。
  • dig 在哪里定义?我在您的代码中没有看到它。您的意思是转而传递d 吗?

标签: c#


【解决方案1】:

去掉所有的.? 操作符,只在方法开始时检查dig 是否为空。

【讨论】:

  • 感谢您的帮助,但 var digits = dig.ToCharArray(); 出现新错误你调用的对象是空的。挖是空的。所以我想这就是检查 dig 是否为 null 的地方
【解决方案2】:

问题在于int? 实际上与int 是不同的类型。 int? 实际上是 Nullable&lt;Int32&gt; 的别名,而 intInt32 的别名。区别在于int? 是引用类型,可能是null,但int 是值类型,不能是null

如果i 确实有可能是null,您应该明确检查,然后使用i.Value

另外,dig 是否真的有可能是null?这是一个有效的输入吗?如果它可能的,您可能需要考虑在方法的开头检查它并相应地处理它。

【讨论】:

  • 谢谢,我正在检查 var digits = dig.ToCharArray(); 错误后是否 dig 为空。你调用的对象是空的。 dig 为空
  • 不,这不是一个有效的输入,所以我猜我需要检查 dig 是否为空,然后做一些别的事情
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多