-1

私のクラスは:

public class Person
{
    private string _firstname;
    private string _lastname;
    private DateTime _birthdate;

    public Person(string firstname, string lastname, DateTime birthdate)
    {
        _firstname = firstname;
        _lastname = lastname;
        _birthdate = birthdate;
    }

    public string Firstname
    { get { return _firstname; } }

    public string Lastname
    { get { return _lastname; } }

    public DateTime Birthdate
    { get { return _birthdate; } }

みんなの年齢を取得するために私がアクセスしている私の方法は次のとおりです。

public int getAge()
{
    TimeSpan ts =DateTime.Now - _birthdate;
    int year = (int)ts.TotalDays / 365;
    return year;
}

私のフォーム:

namespace May22_StructClassObj_HW
{
    public partial class Form1 : Form
    {
        DateTime[] birth = new DateTime[20];
        Person[] People = new Person[20];

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // Create a class Person with the following fields _firstname, _lastname, _birthDate(DateTime Type) Add constructor, properties (get only) and a method GetAge that returns the age (int) of a person. 
            // In Form1, Create an array of Person objects to hold 20 people
            // In Form1_Load: Populate the array with 20 Person objects

            // Add Gui to display all the people in the list (first and last names, birthdate, and age
            // Add Gui 
            //people[0] = new Person("John","Stockton", DateTime.)

            string[] first = new string[20] { "Scott", "Ramona", "Todd", "Melissa", "Naomi", "Leland", "Conor", "Julie", "Armondo", "Leah", "Frank", "Peter", "Ila", "Mandy", "Sammy", "Gareth", "Garth", "Wayne", "Freddy", "Mark" };

            string[] last = new string[20] { "Kennedy", "Kennedy", "Kennedy", "Kennedy", "Kennedy", "Kennedy", "Carrel", "MaloyTheBeautiful", "Johnson", "Smith", "Sinatra", "Clemens", "Eels", "Johnson", "Eels", "Thompson", "Brooks", "World", "Crugar", "Thomas" };

            birth[0] = new DateTime(1987, 2, 7);
            birth[1] = new DateTime(1962, 5, 9);
            birth[2] = new DateTime(1984, 1, 4);
            birth[3] = new DateTime(1977, 4, 1);
            birth[4] = new DateTime(1983, 2, 8);
            birth[5] = new DateTime(1979, 4, 1);
            birth[6] = new DateTime(1965, 9, 9);
            birth[7] = new DateTime(1968, 1, 2);
            birth[8] = new DateTime(1980, 2, 7);
            birth[9] = new DateTime(1982, 2, 7);
            birth[10] = new DateTime(1984, 12, 4);
            birth[11] = new DateTime(1968, 11, 9);
            birth[12] = new DateTime(1968, 2, 8);
            birth[13] = new DateTime(1975, 5, 2);
            birth[14] = new DateTime(1945, 5, 3);
            birth[15] = new DateTime(1969, 4, 6);
            birth[16] = new DateTime(1987, 1, 4);
            birth[17] = new DateTime(1976, 3, 5);
            birth[18] = new DateTime(1989, 8, 6);
            birth[19] = new DateTime(1988, 2, 9);

            // Populate Array Person[] People = new Person[20];   
            for (int i = 0; i < People.Length; i++)
            {
                People[i] = new Person(first[i], last[i], birth[i]);
            }

        }

        private void btnDisAll_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < People.Length; i++)
            {
                richTxtDisplay.AppendText("Name: " + People[i].Firstname + "\t" + People[i].Lastname + "\t" + " BirthDate: " + People[i].Birthdate + "\n\n");
                //richTxtDisplay.AppendText(People[i].ToString());
                //richTxtDisplay.AppendText(People[i].Firstname + People[i].Lastname + People[i].Birthdate + "\n");
            }
        }
    }

ここでの問題:

これが、メソッドを呼び出して、Person配列内の全員の年齢を表示するために使用しているボタンです。しかし、私はこれが間違っていることを知っています。だから誰かが私にそれを案内してください。

private void btnGetAge_Click(object sender, EventArgs e)
{
    for (int i = 0; i < People.Length; i++)
    {
        Person Per = 
            new Person(People[i].Firstname, People[i].Lastname, People[i].Birthdate);
        Per.getAge();
    }
}

私の問題がどこにあるかをリストアップしました。基本的に、私がやりたいのは、メソッドを呼び出して、Person配列内のすべての年齢を表示することです。20人いるので年齢を見せたいです。私のコードはクラスのメソッドの年齢を取得するのに最適だと思いますが、メソッドを使用するために新しいインスタンスを正しく作成したかどうかはわかりません。

4

4 に答える 4

4

LINQを使用して、すべての人の年齢を取得できます。しかし、この情報を表示する場所とすべての年齢層に参加する方法を教えていないので、TextBox(または他の場所)に文字列として表示し、行を次のように分割するとしますEnvironment.NewLine

var allPersonAge = People.Select(p => p.GetAge());
richTxtDisplay.Text = string.Join(Environment.NewLine, allPersonAge);

ちなみに、これは年齢を年単位で計算するためのより正確な方法です。

public int getAge()
{
    DateTime now = DateTime.Today;
    int age = now.Year - _birthdate.Year;
    if (_birthdate> now.AddYears(-age)) age--;
    return age;
}
于 2012-06-06T12:45:17.140 に答える
2
for (int i = 0; i < Person.Length; i++)
{
   Person[i].getAge();
}
于 2012-06-06T12:43:11.197 に答える
1
foreach(Person person in People)
{
int age = person.getAge();
//Do something with the age
}
于 2012-06-06T12:46:25.530 に答える
0

LINQを使用してみませんか

List<int> result = People.Select(p => p.GetAge()).ToList();
于 2012-06-06T12:47:16.440 に答える