Ich habe den folgenden Code:Wie kann man sagen, wenn ein Property eines bestimmten Aufzählungstyp ist?
public class DataReader<T> where T : class
{
public T getEntityFromReader(IDataReader reader, IDictionary<string, string> FieldMappings)
{
T entity = Activator.CreateInstance<T>();
Type entityType = entity.GetType();
PropertyInfo[] pi = entityType.GetProperties();
string FieldName;
while (reader.Read())
{
for (int t = 0; t < reader.FieldCount; t++)
{
foreach (PropertyInfo property in pi)
{
FieldMappings.TryGetValue(property.Name, out FieldName);
Type genericType = property.PropertyType;
if (!String.IsNullOrEmpty(FieldName))
property.SetValue(entity, reader[FieldName], null);
}
}
}
return entity;
}
}
Wenn ich zu einem Feld des Typs erhalten Enum
, oder in diesem Fall NameSpace.MyEnum
, möchte ich etwas Besonderes tun. Ich kann nicht einfach SetValue
, weil der Wert aus der Datenbank kommen, ist sagen wir mal „m“ und den Wert in der Enum
ist „Herr“. Also muss ich eine andere Methode aufrufen. Ich kenne! Legacy-Systeme richtig?
Wie kann ich feststellen, wenn ein PropertyInfo
Element eines bestimmten Aufzählungstyp ist?
Also im obigen Code möchte ich zuerst überprüfen, ob der PropertyInfo
Typ ist eine Spezifikation und wenn es dann meine Methode aufrufen und wenn nicht, dann einfach SetValue
ausführen lassen.
Statt mit Activator.CreateInstance() umwandeln, fügen Sie einfach den „neuen“ Zwang zu Ihrem generic: „where T: Klasse, neu()“. Dann benutze einfach "T entity = new T()". Auf diese Weise können Sie die Notwendigkeit eines parameterlosen Konstruktors zum Zeitpunkt der Kompilierung erzwingen. –
Brannon
@Brannon, Dank, dass ein guter Tipp ist. werde tun, wenn ich in Arbeit komme. Vielen Dank. – griegs