web-dev-qa-db-fra.com

C #: Comment effectuer une vérification nulle sur un objet dynamique

Comment effectuer un null-check sur un objet dynamique?

Pseudo code:

public void Main() {
    dynamic dynamicObject = 33;
    if(true) { // Arbitrary logic
        dynamicObject = null;
    }
    Method(dynamicObject);
}

public void Method(dynamic param) {
    // TODO: check if the content of 'param' is equal to null
}
24
Seb Nilsson

Craignez-vous que l’objet dynamique ait un opérateur d’égalité personnalisé qui modifiera la façon dont la variable null est interprétée? Si oui, utilisez simplement Object.ReferenceEquals

if (Object.ReferenceEquals(null, param)) {
  .......
}
31
JaredPar

Vous pouvez toujours créer le param de type object, c'est ce que fait le compilateur. Lorsque vous tapez un paramètre dynamic, cela signifie simplement que, dans cette méthode, elle utilise uniquement un appel dynamique pour toutes les utilisations de param, mais à l'extérieur, il ne s'agit que d'une signature de type object. Une utilisation plus puissante de dynamicObject serait d’avoir des surcharges de la méthode que vous appelez. Par conséquent, si vous conservez votre exemple et que vous n’avez que deux surcharges, il appellerait l’une des deux méthodes en fonction du type d’exécution, et vous pourrez toujours ajouter plus pour plus de types.

public void Main() {
    dynamic dynamicObject = 33;
    if(true) { // Arbitrary logic
        dynamicObject = null;
    }
    Method(dynamicObject);
}
public void Method(int param) {
  //don't have to check check null
  //only called if dynamicObject is an int
}
public void Method(object param) {
// will be called if dynamicObject is not an int or null
}
0
jbtule

Moyen rapide pourrait être:

if (_owner is null)
{

}
0
tedebus

Vous pouvez utiliser la simplicité:

var s = data.servicePhoneNumber is null ? "" : data.servicePhoneNumber.Value;
0
Ngô Thanh Tùng