Examinons le code suivant :
Quelle est la différence entre les trois types de moulage (OK, 3ème n’est pas un casting, mais vous obtenez l’intention...), et que l'on doit être préféré ?
Examinons le code suivant :
Quelle est la différence entre les trois types de moulage (OK, 3ème n’est pas un casting, mais vous obtenez l’intention...), et que l'on doit être préféré ?
InvalidCastException
si o
n'est pas un string
. Sinon, attribue o
de s
, même si o
est null
.null
de s
si o
n'est pas un string
ou si o
est null
. Pour cette raison, vous ne pouvez pas l'utiliser avec des types de valeur (l'opérateur ne pourrait jamais retourner null
dans ce cas). Sinon, attribue o
de s
.NullReferenceException
si o
est null
. Attribue quelle que soit o.ToString()
renvoie à l' s
, quel que soit le type o
.1 pour plus de conversions, de façon simple et directe. J'ai tendance à ne presque jamais utiliser 2 depuis si quelque chose n'est pas le bon type, j'ai l'habitude de s'attendre à une exception se produise. J'ai seulement vu un besoin pour ce retour, null type de fonctionnalité avec mal conçu bibliothèques qui utilisent des codes d'erreur (par exemple, de retourner la valeur null = erreur, au lieu d'utiliser des exceptions).
3 n'est pas un casting et est juste un appel de méthode. L'utiliser lorsque vous avez besoin de la représentation de chaîne d'un non-objet de type string.
Cela dépend vraiment de savoir si vous savez si o
est une chaîne de caractères et ce que vous voulez faire avec elle. Si votre commentaire signifie qu' o
vraiment vraiment est une chaîne, je préfère la droite (string)o
fonte - il est peu probable à l'échec.
Le plus grand avantage de l'utilisation de la ligne droite en fonte est que, lorsqu'elle échoue, vous obtenez une InvalidCastException, qui vous dit assez bien ce qui s'est mal passé.
Avec l' as
de l'opérateur, si o
n'est pas une chaîne, s
est définie à l' null
, ce qui est pratique si vous n'êtes pas sûr et que vous souhaitez tester s
:
string s = o as string;
if ( s == null )
{
// well that's not good!
gotoPlanB();
}
Toutefois, si vous n'effectuez pas le test, vous devez utiliser s
plus tard et ont une NullReferenceException levée. Ceux-ci ont tendance à être plus fréquents et beaucoup plus difficile à identifier, une fois qu'ils se passe dans la nature, comme presque chaque ligne de déréférence un variable et peut jeter un. D'autre part, si vous êtes en train de jeter un type valeur (toute primitive, ou des structures telles que DateTime), vous devez utiliser le droit en fonte - as
ne fonctionne pas.
Dans le cas particulier de la conversion d'une chaîne, chaque objet a un ToString
, de sorte que votre troisième méthode peut être bien si o
n'est pas nulle et que vous pensez que l' ToString
méthode pourrait faire ce que vous voulez.
Si vous savez déjà ce type qu'il peut lancer, utiliser un style C cast:
var o = (string) iKnowThisIsAString;
Note que c'est seulement avec un style C cast pouvez-vous effectuer explicite de contrainte de type.
Si vous ne savez pas si c'est le type désiré, et vous allez l'utiliser si elle est, à utiliser comme mot-clé:
var s = o as string;
if (s != null) return s.Replace("_","-");
//or for early return:
if (s==null) return;
Notez que tant que ne sera pas appeler n'importe quel type d'opérateurs de conversion. Il ne sera pas la valeur null si l'objet n'est pas null et natif du type spécifié.
Utiliser ToString() pour obtenir une chaîne explicite la représentation de tout objet, même si elle ne peut pas jeté à la chaîne.
L’as mot-clé est bonne dans asp.net lorsque vous utilisez la méthode FindControl.
Cela signifie que vous pouvez utiliser la variable typée, plutôt que de devoir ensuite effectuer un cast de `` comme vous le feriez avec une distribution directe :
Il n’est pas une chose énorme, mais il enregistre les lignes de code et assignation de variable, plus il est plus lisible
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.