2014-09-01 87 views
-3

这里有一个小问题,我希望你们可以帮助我。奇怪的writeline(日期时间结果)

Console.Write("{0} {1} {2} {3} {4} " + customerdetails[i].CustomerNo, 
    customerdetails[i].surname, 
    customerdetails[i].forname, 
    customerdetails[i].street, 
    customerdetails[i].town, 
    customerdetails[i].DOB.ToString("dd/MM/yyyy")); 

这个小东西的实际工作和正常生产的一切,但它会弹出一些奇怪的事情是哪一种看起来像一些二进制的代码示例后:

100名姓123街镇1111年11月11日/ /正确

01-01-0001 0 
    01-01-0001 0 
    01-01-0001 0 //What is this? How to get rid of it 
    01-01-0001 0 

这是很显然只是部分的代码,我觉得有问题somwhere在这里,但如果如果你们需要更多的代码只是这么说。

+6

这是'DateTime'的默认值(和最小值)。 – 2014-09-01 12:54:38

+2

“this”是否指唯一的'0'?那将是你的'客户细节'[i] .CustomerNo'。 – CodeCaster 2014-09-01 12:56:21

+3

'“{0} {1} {2} {3} {4}”+ customerdetails [i] .CustomerNo' - 您在这里混合字符串连接和格式化字符串,为什么? – 2014-09-01 12:56:44

回答

3

最后0CustomerNo,因为你的格式字符串:

"{0} {1} {2} {3} {4} " + customerdetails[i].CustomerNo 

其中就变成了:

"{0} {1} {2} {3} {4} 0" 

此时你排挤在{4}位置的日期,但最终0仍然存在。

要摆脱它取代+,并将其替换格式字符串:

"{0} {1} {2} {3} {4} {5}" 

现在CustomerNo将在第一的位置。

替换默认DateTime值做到这一点:

string dob; 

if (customerdetails[i].DOB == DateTime.MinValue) 
{ 
    dob = "(unknown)"; // or whatever 
} 
else 
{ 
    dob = customerdetails[i].DOB.ToString("dd/MM/yyyy"); 
} 

现在使用dob作为Console.Write()的参数。

+0

然后零仍然会显示,因为它只是'CustomNo'的值,或者不是? – 2014-09-01 13:00:13

+0

是的,但是在第一列中,不是在日期时间之后的最后一个,这使OP很困惑。 – pid 2014-09-01 13:00:42

1

有没有办法设置[日期时间],所以它不会显示默认值?只有我输入的那些?

默认日期时间和代码之间没有区别。如果您想表示“无日期”,请使用可表示为DateTime?的可为空的日期时间。

+0

我通过类似Console.Write(“\ n \ t \ t \ t输入客户姓名:”)输入所有客户详细信息; customerdetails [x] .surname = Console.ReadLine();而现在最大客户只有5个,所以默认情况下,没有太多的默认日期,但我想将其更改为更高的像30.因此,我想我的问题是我怎么能打印出所有的customerdetails已被手动填充而不使用阵列中的每个空间。 – Skretek112 2014-09-01 13:08:07

2

我相信你创建customerdetails实例的数组,但只有初始化的第一个指数实例。假设你的代码:

Console.Write("{0} {1} {2} {3} {4} " + customerdetails[i].CustomerNo, 
    customerdetails[i].surname, 
    customerdetails[i].forname, 
    customerdetails[i].street, 
    customerdetails[i].town, 
    customerdetails[i].DOB.ToString("dd/MM/yyyy")); 

是一个for循环,所以你customerdetails[0]获得价值,并在列表中的其余部分只是显示其默认值。

01-01-0001的日期时间

0整数

string.Empty字符串

为了摆脱不需要的值的,刚刚从数组列表中删除那些未初始化实例。