EDIT:
Thanks to everyone who replied! I appreciate all of your answers :)
所以我有一个带有以下构造函数的类:
public Transaction(DataRow row)
{
LastName = row.Field<string>("LastName");
FirstName = row.Field<string>("FirstName");
MI = row.ItemArray[3].ToString()[0];
ContactNumber = row.ItemArray[4].ToString();
Hours = int.Parse(row.ItemArray[5].ToString());
CheckIn = (DateTime)row.ItemArray[6];
roomNumber = int.Parse(row.ItemArray[9].ToString());
//Paid = row.Field<int>("Paid");
//TotalBill = row.Field<int>("TotalBill");
}
请注意我有两个人用/&#39; s注释掉了因为如果我不这样做,即使我尝试了#row;&#39; row.Field ([Whatever])。GetValueOrDefault()&#39;&#39;,它仍然是null,我的构造函数返回null。我的数据库设置也有默认值,所以IDK有什么不对。 有人有工作吗? :)
答案 0 :(得分:3)
DataRow类有一个名为IsNull的方法,可以接收列名。 只需将它与条件运算符
组合即可 Paid = row.IsNull("Paid") ? 0 : row.Field<int>("Paid");
对于可能包含空值的所有其他字段也是如此。
答案 1 :(得分:2)
首先检查null
并提供默认值:
public Transaction(DataRow row)
{
LastName = row.Field<string>("LastName");
FirstName = row.Field<string>("FirstName");
MI = row.ItemArray[3].ToString()[0];
ContactNumber = row.ItemArray[4].ToString();
Hours = int.Parse(row.ItemArray[5].ToString());
CheckIn = (DateTime)row.ItemArray[6];
roomNumber = int.Parse(row.ItemArray[9].ToString());
Paid = row.Field<int?>("Paid") ?? 0;
TotalBill = row.Field<int?>("TotalBill") ?? 0;
}
有关??
运营商的详细信息,请参阅MSDN上的?? Operator (C# Reference)页面。
答案 2 :(得分:1)
您可以简单地使用Nullable类型和GetValueOrDefault
方法,或使用null合并运算符。
Paid = row.Field<int?>("Paid").GetValueOrDefault()
或
Paid = row.Field<int?>("Paid") ?? 0
在这两种情况下,Paid
的值都为0
,您可以根据需要进行更改。
答案 3 :(得分:0)
创建自己的小功能,进行简单的检查。
遵循: public integer GetNumber(object val) { if(IsNumeric(val)) { 返回; 其他 { 返回0; } }
我对C#并不精彩,但这应该会给你一个想法。对格式化感到抱歉,我正在使用完全没有帮助的手机。