generic result cast

04/06/2010 - 15:47 von André | Report spam
Hi,
habe mir eine Methode AddNewItem() geschrieben die mir für eine x-beliebige
Klasse die Properties GUID, ... füllt.
Ist es möglich statt einem Object den Rückgabewert in der Methode
AddNewItem() auf die entsprechende Klasse zu casten
so das ich als Aufruf dann nur noch dort stehen habe:

Person p = CollectionExtensions.AddNewItem(typeof(Person));

public static ??? AddNewItem(Type _class)
{}
return (???) obj ;

Gruß

André





//
// so sieht mein Aufruf imo aus, klappt auch
//
Person p = (Person)CollectionExtensions.AddNewItem(typeof(Person));
persons.Add(p);

public static object AddNewItem(Type _class)
{
string sPropertyField;
object obj = Activator.CreateInstance(_class);

System.Reflection.PropertyInfo[] arrPropInfo =
_class.GetProperties();

foreach (System.Reflection.PropertyInfo pInfo in arrPropInfo)
{
sPropertyField = pInfo.Name;

switch (sPropertyField)
{
case "GUID":
pInfo.SetValue(obj, "{" + Guid.NewGuid().ToString() +
"}",null);
break;
case "GUIDDAT":
pInfo.SetValue(obj, DateTime.Now, null);
break;
case "GUIDUHR":
pInfo.SetValue(obj, DateTime.Now.ToShortTimeString(),
null);
break;
case "GUIDUSER":
pInfo.SetValue(obj, "", null);
break;
case "GUIDATTRIB":
pInfo.SetValue(obj, 0, null);
break;
}
}
return obj ;
 

Lesen sie die antworten

#1 Frank Dzaebel
04/06/2010 - 20:51 | Warnen spam
Hallo André,

Ist es möglich statt einem Object den Rückgabewert in der Methode
AddNewItem() auf die entsprechende Klasse zu casten
so das ich als Aufruf dann nur noch dort stehen habe:
Person p = CollectionExtensions.AddNewItem(typeof(Person));



Folgendermaßen wàre es ggf. möglich:

Aufruf:
Person p = CollectionExtensions.AddNewItem<Person>();
_______
Methoden-Implementation:

public static T AddNewItem<T>() where T : new()
{
string sPropertyField;
T t = new T();

PropertyInfo[] arrPropInfo = typeof(T).GetProperties();

foreach (PropertyInfo pInfo in arrPropInfo)
{
sPropertyField = pInfo.Name;

switch (sPropertyField)
{
case "GUID":
pInfo.SetValue(t, Guid.NewGuid().ToString("B"), null);
break;
case "GUIDDAT":
pInfo.SetValue(t, DateTime.Now, null);
break;
case "GUIDUHR":
pInfo.SetValue(t, DateTime.Now.ToShortTimeString(), null);
break;
case "GUIDUSER":
pInfo.SetValue(t, "", null);
break;
case "GUIDATTRIB":
pInfo.SetValue(t, 0, null);
break;
}
}
return t;
}
________________________________

_class



keine Unterstriche für lokale Variablen oder Parameter (u.a.).
-> siehe Benennungsrichtlinien.


und nimm anstatt:
"{" + Guid.NewGuid().ToString() + "}";
folgendes:
Guid.NewGuid().ToString("B");

[Guid.ToString-Methode (String) (System)]
http://msdn.microsoft.com/de-de/lib...f8hh4.aspx


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen