Conversion automatique de type en C #
Je sais que vous pourriez remplacer un objet de la Méthode ToString (), de sorte que chaque fois que vous appelez un objet ou de le transmettre à une fonction qui requiert un type de Chaîne sera convertie en une Chaîne de caractères.
J'ai écrit plusieurs méthodes d'extension pour le type d'objet "objet"
public static DateTime ToDate(this object date)
{
return DateTime.Parse(date.ToString());
}
public static int ToInteger(this object num)
{
return Int32.Parse(num.ToString());
}
public static long ToLong(this object num)
{
return Int64.Parse(num.ToString());
}
de sorte que je pouvais l'appeler comme ceci:
eventObject.Cost = row["cost"].ToString();
eventObject.EventId = row["event_id"].ToLong();
Cependant, ce que je veux accomplir est de convertir les objets row qui est de type "objet" de son type correct basé sur les types de propriété sur mon eventObject'. Donc, je pourrais l'appeler comme ceci:
eventObject.Cost = row["cost"];
eventObject.EventId = row["event_id"];
La ligne est un DataRow si ce qui compte.
source d'informationauteur Aivan Monceller
Vous devez vous connecter pour publier un commentaire.
C# prend en charge implicite de conversion pour les types et vous pouvez l'utiliser pour vos types personnalisés comme suit:
Et prend en charge les méthodes d'extensionmais n'est pas soutien de la conversion implicite comme une extension de la méthode comme suit:
Non, vous vous trompez. Le code suivant ne compile pas:
Le compilateur ne sera pas obtenir le type de
MyMethod
paramètre(qui eststring
) d'abord et essayer de convertir l'argument que vous avez passé(dont le type estMyClass
). Je suppose que vous êtes probablement induire en erreur par quelque chose commeConsole.WriteLine
. Base sur le code ci-dessus,
imprime "MyClass" de la console, il semble que le compilateur sait vous devez passer une chaîne àConsole.WriteLine(new MyClass())
Console.WriteLine
et d'essayer de convertirMyClass
à la chaîne. Mais l'essentiel estConsole.WriteLine
possède plusieurs surcharges, l'un d'eux est deobject
:Je crois que ce que vous êtes à la recherche pour est conversion implicite, qui est décrite ici: http://msdn.microsoft.com/en-us/library/z5z9kes2.aspx.
Cependant, l'ajout de ces pour objet serait une très mauvaise idée, pour les raisons énoncées sur la page, je suis lié à.
Pardonnez-moi si je suis une lapalissade, mais j'ai eu cette impression après la lecture de votre question.
Vous connaissez la basetype de chaque type .NET est objet de droit?
Si la colonne dans le datarow qui vous décrire le type de l'objet peut tout aussi bien être de même type que le membre que vous essayez d'attribuer et puis un simple cast est nécessaire.
par exemple
eventObject.EventId = (int)ligne["event_id"];
Pour résumer il suffit de définir ces méthodes, et vous pouvez utiliser les objets de la classe de Test dans les méthodes nécessitant une Chaîne de caractères en paramètre.