【发布时间】:2016-02-28 13:22:51
【问题描述】:
我必须编写程序,它会询问用户一些数据,然后用这些数据打印一些文本。 下面只是一段代码(有效),还有其他变量。
class Student
{
static public DateTime birthDay;
public void GetStudentInformation()
{
Console.WriteLine("Enter student's birth date (as mm/dd/yyyy): ");
birthDay = DateTime.Parse(Console.ReadLine());
}
public void PrintStudentData(ref DateTime birthDay)
{
Console.WriteLine("Student was born in {0}", birthDay.ToString("d"));
}
}
class Program
{
static void Main(string[] args)
{
Student newStudent = new Student();
newStudent.GetStudentInformation();
newStudent.PrintStudentData(ref Student.birthDay);
Console.ReadKey()
}
}
当我询问生日时,我只需要日期,而不是确切的时间。 有问题:
- 如何将用户输入的日期更改为 mm/dd/yyyy 以外的其他格式?
- 我将如何操作输出格式日期?所以它不会是 yyyy-dd-mm 而是 dd/mm/yyyy 或 dd.mm.yyyy?
我想补充一下,我真的是 C# 的初学者,并尝试了一些使用 CultureInfo、ParseExact、TryParse 的代码,并使用 {0:'dd/mm/yyyy'} 修改输出字符串。
【问题讨论】:
-
前两个建议:1)不要在你的类中混合用于接口和数据表示的代码(因为它们是你将无法在没有终端/控制台的环境中重用它们,ej : web) 2) 完全使用 CultureInfo,除非它不符合您的需要。现在,我不确定这个问题,你想要可配置的日期格式吗?无论如何,“用户友好”是什么意思?编辑:我假设您已经测试了您提到的方法。 [您可以编辑您的问题以添加说明]
-
@Theraot - 我根本不明白你的第一点。这段代码有什么问题?我应该为某些数据创建另一个类吗?是的,我多次测试过这个程序。我的第二个问题是关于输出字符串。程序打印“学生出生于 yyyy-dd-mm”,我会将其切换为,例如,“学生出生于 dd/mm/yyyy”。
-
没错。我的措辞可能太权威了。我这样说:有很多方法可以完成一项任务,有些更高效,有些更可重用,而且它们并不一致。您可能会越来越重视可重用性而不是效率。因此,我建议将 UI 与数据表示分开。当前的代码是否因为缺少这一点而行为不端?不,它应该可以正常工作。此外,此代码可能永远不会被迁移,因此它的可重用性可能并不重要。不过,在需要时让自己习惯是件好事。什么时候?当您想要相同的核心多个 UI 时。同时你可以忘记我说的话。
-
@Theraot 这显然是学生的作业,我敢肯定他永远不会重复使用它(除非他复读)
-
@Theraot,正如 Gusman 所说 - 这只是 edx 课程的作业,但感谢您的建议,我会尽量记住这一点:D