Ich muss die Datumsangaben für eine Reihe von Objekten anpassen.
Ich möchte Schleife durch die Eigenschaften der Klasse und wenn der Typ ist dateTime entsprechend anpassen.
Gibt es irgendeine Art von "Typbeschreibung", die ich verwenden kann?
Ich muss die Datumsangaben für eine Reihe von Objekten anpassen.
Ich möchte Schleife durch die Eigenschaften der Klasse und wenn der Typ ist dateTime entsprechend anpassen.
Gibt es irgendeine Art von "Typbeschreibung", die ich verwenden kann?
Sie können verwenden Reflexion für diese.
Ihr Szenario könnte in etwa so aussehen:
static void Main(string[] args)
{
var list = new List<Mammal>();
list.Add(new Person { Name = "Filip", DOB = DateTime.Now });
list.Add(new Person { Name = "Peter", DOB = DateTime.Now });
list.Add(new Person { Name = "Goran", DOB = DateTime.Now });
list.Add(new Person { Name = "Markus", DOB = DateTime.Now });
list.Add(new Dog { Name = "Sparky", Breed = "Unknown" });
list.Add(new Dog { Name = "Little Kid", Breed = "Unknown" });
list.Add(new Dog { Name = "Zorro", Breed = "Unknown" });
foreach (var item in list)
Console.WriteLine(item.Speek());
list = ReCalculateDOB(list);
foreach (var item in list)
Console.WriteLine(item.Speek());
}
Wenn Sie die Geburtstage aller Säugetiere neu berechnen wollen. Und die Implementierungen der oben genannten sehen wie folgt aus:
internal interface Mammal
{
string Speek();
}
internal class Person : Mammal
{
public string Name { get; set; }
public DateTime DOB { get; set; }
public string Speek()
{
return "My DOB is: " + DOB.ToString() ;
}
}
internal class Dog : Mammal
{
public string Name { get; set; }
public string Breed { get; set; }
public string Speek()
{
return "Woff!";
}
}
Im Grunde genommen müssen Sie also Relfection verwenden, einen Mechanismus, um Typen zu überprüfen und die Eigenschaften der Typen und andere Dinge zur Laufzeit zu erhalten. Hier ist ein Beispiel, wie Sie 10 Tage zu den oben genannten DOB's für jedes Säugetier, das ein DOB bekam hinzufügen.
static List<Mammal> ReCalculateDOB(List<Mammal> list)
{
foreach (var item in list)
{
var properties = item.GetType().GetProperties();
foreach (var property in properties)
{
if (property.PropertyType == typeof(DateTime))
property.SetValue(item, ((DateTime)property.GetValue(item, null)).AddDays(10), null);
}
}
return list;
}
Denken Sie nur daran, dass die Verwendung von Reflexion langsam sein kann, und sie ist im Allgemeinen langsam.
Allerdings wird das Oben genannte gedruckt:
My DOB is: 2010-03-22 09:18:12
My DOB is: 2010-03-22 09:18:12
My DOB is: 2010-03-22 09:18:12
My DOB is: 2010-03-22 09:18:12
Woff!
Woff!
Woff!
My DOB is: 2010-04-01 09:18:12
My DOB is: 2010-04-01 09:18:12
My DOB is: 2010-04-01 09:18:12
My DOB is: 2010-04-01 09:18:12
Woff!
Woff!
Woff!
class HasDateTimes
{
public DateTime Foo { get; set; }
public string NotWanted { get; set; }
public DateTime Bar { get { return DateTime.MinValue; } }
}
static void Main(string[] args)
{
foreach (var propertyInfo in
from p in typeof(HasDateTimes).GetProperties()
where Equals(p.PropertyType, typeof(DateTime)) select p)
{
Console.WriteLine(propertyInfo.Name);
}
}
Hey, diese Frage ist schon etwas älter, aber du könntest das hier gebrauchen:
innerhalb der Klasse (Auswahl aller Werte) - das Setzen von Werten würde ohne das Casting funktionieren, es ist nur zum Auswählen:
(from property in this.GetType().GetProperties()
where property.PropertyType == typeof(DateTime)
select property.GetValue(this)).Cast<DateTime>()
außerhalb der Klasse wäre:
var instance = new MyClass();
var times = (from property in instance.GetType().GetProperties()
where property.PropertyType == typeof(DateTime)
select property.GetValue(instance)).Cast<DateTime>()
Um den maximalen Datetime-Wert zu erhalten, führe ich Folgendes aus
var lastChange = (from property in this.GetType().GetProperties()
where property.PropertyType == typeof(DateTime)
select property.GetValue(this)).Cast<DateTime>().Max();
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.