【发布时间】: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- 虽然老实说循环已经是一个奇怪的开始,但你没有任何“备份计划”以防digits是null -
基本上:
int?可以是null,int不能使您的 ia 成为常规 int,并在将其拼接成之前对dig使用空检查一个数组。 -
感谢删除所有“?”带走了这些错误,但现在我有一个新错误。 var 数字 = dig.ToCharArray();未设置到对象实例的对象引用 dig 为空。我还没有检查 dig 是否为空。
-
dig在哪里定义?我在您的代码中没有看到它。您的意思是转而传递d吗?
标签: c#