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