La conversion de Type d'un Objet à l'aide d'un “Type” d'Objet en C#
Celui-ci a prouvé être un peu difficile pour moi jusqu'à présent. Je me demande si il est possible de type cast d'un objet à l'aide d'un Système.Type d'objet.
J'ai illustré ci-dessous ce que je veux dire:
public interface IDataAdapter
{
object Transform(object input);
Type GetOutputType();
}
public class SomeRandomAdapter : IDataAdapter
{
public object Transform(object input)
{
string output;
//Do some stuff to transform input to output...
return output;
}
public Type GetOutputType()
{
return typeof(string);
}
}
//Later when using the above methods I would like to be able to go...
var output = t.Transform(input) as t.GetOutputType();
Ci-dessus est une interface générique qui est pourquoi je suis à l'aide d'un "objet" pour les types.
OriginalL'auteur Ryall | 2009-09-03
Vous devez vous connecter pour publier un commentaire.
Typique de la façon de le faire est d'utiliser des génériques, comme suit:
Comme vous l'avez mentionné dans votre commentaire ci-dessous, les génériques sont très similaires pour les Modèles C++. Vous pouvez trouver la La documentation MSDN pour les Génériques ici, et à l'article "Les différences Entre les Modèles C++ et C# Génériques (Guide de Programmation C#)" sera probablement utile.
Enfin, j'ai peut-être l'incompréhension de ce que vous voulez faire à l'intérieur du corps de la méthode: je ne suis pas sûr de savoir comment vous allez transformer d'un type arbitraire
T
dans un autre type arbitraireT2
, à moins de spécifier des contraintes sur les types génériques. Par exemple, vous pourriez avoir besoin de spécifier qu'il s'agit de mettre en œuvre certaines de l'interface. Les contraintes sur les Paramètres de Type (Guide de Programmation C#) explique comment le faire en C#.Modifier: compte tenu de votre nouvelle question, je pense que cette réponse de M. Marco est correct (c'est, je pense que vous devriez utiliser le
Converter
délégué de l'endroit où vous êtes en train d'essayer d'utiliser votreIDataAdapter
interface.)Merci encore une fois de Jeff.
Pas de problème, et j'ai mis à jour ma réponse un peu à nouveau.
OriginalL'auteur Jeff Sternal
Pourquoi faire compliqué, quand vous êtes sûr qu'elle retourne une chaîne de caractères?
Si j'ai mal compris ce que vous dites, ici, c'est une façon de plus
Mise à jour, merci pour la réponse.
Je vais Frapper 1 pour cet! J'aime l'idée de
Convert.ChangeType()
et de fournir le type de l'objet de la 2ème argument de sorte qu'il sera changé à ce type. Je travaille sur une autre bibliothèque et en espérant que cela vous fera économiser de ma nuit. Merci @shahkalpeshOriginalL'auteur shahkalpesh
Vous êtes mieux d'utiliser quelque chose comme le Convertisseur délégué
pour un exemple, consultez msdn
OriginalL'auteur Marco M.
C'est ce que je suis allé avec (en fonction de la IEnumerable structure):
OriginalL'auteur Ryall
Serait-il pas plus judicieux d'utiliser une réelle interface générique:
Je suis un peu confus quant à la façon dont vous utilisez le 'U' à l'extérieur du générique. Ce champ êtes-vous donné?
serait votre type réel, vous ne pouvez pas vraiment utiliser "U" comme ça. Regarde @Jeff réponse et notez son T2 est remplacé par "chaîne" et les matchs de la même manière.
J'ai pu également utiliser un " var " et de ne pas jeter à tous si je ne me trompe pas?
OriginalL'auteur Kent Boogaart