奇怪的写作线(日期时间结果)

时间:2014-09-01 12:53:39

标签: c# arrays datetime

这是一个小问题,我希望你们能帮助我。

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 Street Town 11/11/1111 //正确

    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

这显然只是代码的一部分,我认为这里存在问题,但是如果你们需要更多代码就这么说。

3 个答案:

答案 0 :(得分: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()的参数。

答案 1 :(得分: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]的值,而列表中的其余部分只显示其默认值。

对于DateTime

01-01-0001

0表示整数

string.Empty表示字符串

要删除不需要的值,只需从数组列表中删除那些未初始化的实例。

答案 2 :(得分:1)

  

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

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