查找基于另一个类变量
问题描述:
类变量
比方说,我创建了一个名为Person类,它有姓名,出生和它内部的性别的一年,例如:查找基于另一个类变量
class Person{
public string name;
public int year;
public string gender;
public Person(string _name, int _year, string _gender)
{
name= _name;
year= _year;
gender= _gender;
}
}
使用这个类,我已经创建了3人在我的主,让我们说:
Person person1 = new Person("Bob",1992,"M");
Person person2 = new Person("Gilbert", 1984, "M");
Person persone = new Person("hank" 1989, "F");
我的问题是:这样才有可能建立,这需要一年作为参数的方法,发现仅基于一个人的年龄和名字?
这里是我做过什么,但如果有比只有3人多了不少这是不是所有的好:
public string age(int ParamAge)
{
string message = "";
if (ParamAge == 1992)
message = "Bob is " + (DateTime.Now.Year - ParamAge) + " years old.";
if (ParamAge == 1984)
message = "Gilbert is " + (DateTime.Now.Year - ParamAge) + " years old.";
if (ParamAge == 1989)
message = "Hank is " + (DateTime.Now.Year - ParamAge) + " years old.";
return message;
}
答
你都应该Person
实例添加到List<Person>
。使用linq,你可以选择一个标准的人。
为了简单起见,我用你的代码:
// this is what you know, creating persons.
Person person1 = new Person("Bob","McGee",1992,"M"); // <---- NOTE? four parameters???? (you code would not compile....)
Person person2 = new Person("Gilbert", 1984, "M");
Person persone = new Person("hank" 1989, "F");
// create a list that contains Persons
List<Person> list = new List<Person>();
// add those persons to the list.
list.Add(person1);
list.Add(person2);
list.Add(persone);
// with the FirstOrDefault() extension method you can select a person.
Person person = personList.FirstOrDefault(item => item.year == year);
// create a message
string message;
// check if the person is a valid instance, because FirstOrDefault will return the default(Person) if none of the persons mathes the criteria. (default == null)
if(person != null)
message = Person.name + " is " + (DateTime.Now.Year - person.year).TotalYears + " years old.";
else
message = "Could not find anyone";
// show the message.
MessageBox.Show(message);
总之你并不需要创建要添加一个人的声明的foreach人。
例如:
list.Add(new Person("Gilbert", 1984, "M"));
+0
这不是很好的解决方案。更优化的解决方案,将关键年份的值放入字典中。 –
+1
我爱字典,但我认为这是下一章。在这种情况下,不应使用字典,因为出生年份不是唯一的。你不想以'Dictionary
答
外约+/-一年的准确性的关注,我先给类进行计算你。
public class Person
{
public string Name { get; set; }
public int Year { get; set; }
public string Gender { get; set; }
public int RelativeAge
{
get { return DateTime.Today.Year - Year; }
}
public Person(string name, int year, string gender)
{
Name = name;
Year = year;
Gender = gender;
}
public string AgeStatement()
{
return string.Format("{0} is {1} {2} old.", Name, RelativeAge, MakePlural("year", RelativeAge));
}
/// <summary>
/// Add an S to values over one.
/// </summary>
/// <param name="element">Item to be plural</param>
/// <param name="value"></param>
/// <returns></returns>
public string MakePlural(string element, int value)
{
return element + ((value > 1) ? "s" : "");
}
}
以下是验证你的结果的测试:
[TestClass]
public class PersonUnitTests
{
[TestMethod]
public void TestPersonRelativeAge()
{
var p = new Person("Jane", 1986, "F");
Assert.AreEqual(p.RelativeAge, 30);
}
[TestMethod]
public void TestAgeStatement()
{
var p = new Person("Jane", 1986, "F");
Assert.AreEqual(p.AgeStatement(), "Jane is 30 years old.");
}
}
把你的人的名单,你可以很容易地 – Plutonix
什么具有相同的出生年份多个人的查询呢?你打算如何处理歧义? –
除了我相信有人会帮助你的技术实现之外,请考虑知道某人出生的那一年,并且当前日期并不能提供足够的信息来了解他们的年龄,因为他们可能有一个生日(月和日)在当前日期之后或当前日期之前。 –