Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我得到一个错误无法隐式转换类型int?到int。存在expicit转换(是否缺少强制转换?)_C# - Fatal编程技术网

C# 我得到一个错误无法隐式转换类型int?到int。存在expicit转换(是否缺少强制转换?)

C# 我得到一个错误无法隐式转换类型int?到int。存在expicit转换(是否缺少强制转换?),c#,C#,我对这一点很陌生,但它来自一个表单,用户选择他们想要生成多少个数字,然后输入他们的起始数字范围,从那里代码应该从数字中获取校验位,然后以类似的方式创建其他数字 private void button1_Click(object sender, EventArgs e) { using (StreamWriter objWriter = new StreamWriter("C:\\temp\\Test.txt")) {

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

     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();
                }

              }

问题是
int?
实际上是与
int
不同的类型
int?
实际上是
Nullable
的别名,而
int
Int32
的别名。不同之处在于,
int?
是一种引用类型,可能是
null
,但
int
是一种值类型,不能是
null

如果实际存在
i
null
的可能性,则应明确检查,然后使用
i.Value


另外,实际上是否可能
dig
null
?这是有效的输入吗?如果可能的话,您可能会考虑在方法的开始检查它并相应地处理它。

< P> >除去所有的<代码> .< /Cord>运算符,并在方法开始时检查<代码>挖掘> /COD>是否为空。< /P>使用可空类型Type的<代码>值< /代码>属性。错误是清楚的,
int?
不是一个
int
-虽然老实说循环已经是一个奇怪的开始,但是如果
数字
null
基本上是:
int?
可以是
null
int
不能使你的i成为常规int,在将其拼接到数组之前,对
dig
使用空检查。感谢删除所有“?”消除了这些错误,但现在我有了一个新的错误。var digits=dig.ToCharArray();未设置为对象实例的对象引用为null。我还没有检查dig是否为null。在哪里定义了
dig
?我在你的代码里没看到。您是想将
d
传递进来吗?谢谢您的帮助,但是var digits=dig.ToCharArray()出现了一个新错误;对象引用未设置为对象的实例。dig是空的。所以我想这就是检查dig是否为null的地方谢谢你,我正在检查dig是否为null,在得到var digits=dig.tocharray()的错误之后;对象引用未设置为对象的实例。dig为null不,这将不是一个有效的输入,所以我猜我需要检查dig是否为null,然后执行其他操作
  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();

        }