En C # puis-je convertir une variable de type objet en une variable de type T où T est défini dans une variable Type?
Réponses
Trop de publicités?Bien sûr, vous pouvez ici être à la fois un simple (supposons qu’il s’agisse d’une distribution de type T) et si c’est commode (supposons que nous puissions le convertir en un T) converti:
public T CastExamp1<T>(object input) {
return (T) input;
}
public T ConvertExamp1<T>(object input) {
return (T) Convert.ChangeType(input, typeof(T));
}
Mettre boxing et unboxing de côté pour des raisons de simplicité, il n'y a pas d'exécution spécifique d'action impliqués dans la coulée le long de la hiérarchie d'héritage. C'est surtout un moment de la compilation chose. Essentiellement, un casting indique au compilateur de traiter la valeur de la variable d'un autre type.
Ce que vous pourriez faire une fois le plâtre? Vous ne connaissez pas le type, de sorte que vous ne seriez pas en mesure d'appeler une méthode sur elle. Il n'y aurait pas quelque chose de spécial que vous pourriez faire. Plus précisément, il peut être utile uniquement si vous connaissez les types possibles au moment de la compilation, de la lancer manuellement et traiter chaque cas séparément if
déclarations:
if (type == typeof(int)) {
int x = (int)obj;
DoSomethingWithInt(x);
} else if (type == typeof(string)) {
string s = (string)obj;
DoSomethingWithString(s);
} // ...
Comment pouvez vous faire ça? Vous avez besoin d'une variable ou d'un champ de type T où vous pouvez stocker l'objet après la distribution, mais comment pouvez-vous avoir une telle variable ou un tel champ si vous ne connaissez T qu'au moment de l'exécution? Donc, non, ce n'est pas possible.
Type type = GetSomeType();
Object @object = GetSomeObject();
??? xyz = @object.CastTo(type); // How would you declare the variable?
xyz.??? // What methods, properties, or fields are valid here?