定义AddYears,使用C#计算十年的年龄

时间:2014-01-06 14:46:02

标签: c# string datetime int

我是C#的新手并且已经从书中做过练习。练习是编写一个程序,从控制台读取我的年龄,并在十年后打印我的年龄。

以下是我根据目前所理解的编写的代码。

namespace Page_108_Age
{
    class Program
    {
        static void Main(string[] args)
        {
            //Gives date of birth
            DateTime dob = new DateTime(1989, 10, 30, 23, 31, 00);

            //Gives current age
            DateTime today = DateTime.Today;
            int age = today.Year -dob.Year;
            if (today < dob.AddYears(age)) age--;

            //age plus ten years
            DateTime agePlusTen = age.AddYears(10);

            Console.WriteLine(age);
            Console.ReadLine();
        }
    }
} 

我的问题是第16行的AddYears

[DateTime dobPlusTen = age.AddYears(10);]

给我以下错误......

  

'int'不包含'AddYears'的定义,也没有扩展名   方法'AddYears'接受'int'类型的第一个参数可能是   发现(您是否缺少using指令或程序集引用?)

我显然错过了一些东西,但现在确定我认为还需要定义AddYears,因为它在我的代码中没有突出显示为结构。

注意:对于“dobPlusTen”的道歉,因为大多数人对此感到抱歉是出生日期的短暂加上十年,这不是它应该是什么,因为我想要Current Age Plus十年,我将其更改为agePlusTen。

7 个答案:

答案 0 :(得分:2)

你写道:

DateTime dobPlusTen = age.AddYears(10);

这不响铃吗?

您的变量名为dobPlusTen,但您指定的 不是 dob + 10。

所以将其改为

DateTime dobPlusTen = dob.AddYears(10);

你会没事的。

编辑根据Ross Dargan在这个答案下面的评论(我没有注意到确切的问题:练习是编写一个程序,从控制台读取我的年龄并打印我的年龄从现在起十年后。),实际上要简单得多。

只是一个

var line = Console.ReadLine();
int agePlus10 = Convert.ToInt32(line) + 10;
Console.WriteLine(agePlus10);

会做的。

答案 1 :(得分:2)

关闭: - )

Age是一个int,因此该方法不存在(它存在于DateTime上)。这应该让你走上正轨: -

class Program
{
    static void Main(string[] args)
    {
        //Gives date of birth
        DateTime dob = new DateTime(1989, 10, 30, 23, 31, 00);

        //Gives current age
        DateTime today = DateTime.Today;
        int age = today.Year -dob.Year;
        if (today < dob.AddYears(age)) age--;

        //age plus ten years
        age = age +10;

        DateTime agePlusTen = dob.AddYears(age);

        Console.WriteLine(agePlusTen.ToShortDateString());

        Console.ReadLine();
    }
}

答案 2 :(得分:1)

我想有几种方法可以看看这个。

首先,年龄是整数。所以它没有AddYears方法。你可以添加10:

age += 10;

或者,如果要使用DateTime类型的AddYears方法,则需要使用DateTime变量。如

DateTime dobPlusTen = dob.AddYears(10);

答案 3 :(得分:1)

我从计算机编程基础的基础知识做了同样的练习。 在该问题的解决方案和指南中,他们要求使用方法Console.ReadLine()int.Parse()DateTime.AddYears(),我的解决方案坚持这三种方法:

Console.WriteLine("Enter Age:");
string Age = Console.ReadLine();
int ma = int.Parse(Age);

DateTime today = DateTime.Now;

// add the 10 years to today's date
DateTime future = today.AddYears(10);

// add your age to future
DateTime futurYear = future.AddYears(ma);

// now subtract them to get your age in 10 years from now 
int fa = futurYear.Year - today.Year;

Console.WriteLine("\nIn 10 years you will be:");
Console.WriteLine(fa);

答案 4 :(得分:0)

你应该坚持使用DateTime对象,因为整数没有日期/年的概念(由错误给出)。而是做类似的事情:

int yearsOld = (int)(today.Subtract(dob).TotalDays / 365);

这使您可以使用TimeSpan对象,因此您可以获得确切的年龄而不仅仅是近似值。你可以在之后添加10。

编辑:

当然,这并不是闰年的问题,而且我正在逐渐走向低年,但也许你会明白这一点。

答案 5 :(得分:0)

age是表示年数的int,而不是DateTimeAddYearsDateTime上存在的方法,而不是int。您应该只是添加10到年龄,或者从DateTime添加或减去10年(从today添加10或从dob减去10;这些几乎都是同样的)提出正确的数字:

int agePlusTen = age + 10;

// or

DateTime tenYearsFromNow = today.AddYears(10);
int age = tenYearsFromNow.Year - dob.Year;
if (tenYearsFromNow < dob.AddYears(age)) age--;

答案 6 :(得分:0)

我的版本:

Console.WriteLine("Please, enter your age");
string age = Console.ReadLine();
Console.WriteLine("\nIn 10 years you will be:");
DateTime myNewAge = new DateTime(int.Parse(age));
Console.WriteLine(int.Parse(age) + 10);