7
votes

string.isnullorempty en utilisant la garniture ()

Je veux supprimer la première ligne:

                if ((id % 2 == 0)
                    && !string.IsNullOrEmpty(cell.Text)
                    && !string.IsNullOrEmpty(cell.Text.Trim())
                    )


9 commentaires

Vous voulez dire string.isnullorwhitepace


Est-ce trop difficile à tester ou à rechercher la documentation officielle? ( msdn.microsoft.com/en-us/library/... ). Réponse courte: Non, une chaîne d'espaces n'est pas nulle ni vide.


Vous manquez le point. Oui, vous pouvez utiliser isnullorempty , mais l'OP est confus sur la raison pour laquelle le premier appel est nécessaire pour éviter un NullReferenceException . Comprendre cela est beaucoup plus important que de passer à une méthode différente, car il a été dit de le faire.


@ MADTH3 Je pense qu'il demande réellement s'il peut omettre le premier chèque: ! string.isnullorempty (cellt.text) , non si string.isnullorempty () chèques pour blanc Les espaces, ont dû lire la question couple de fois.


@ntziolis Vous avez raison, j'ai mal compris la ligne à supprimer. Je maintiens toujours qu'il n'est pas difficile de l'essayer et de vérifier les documents officiels.


Merci Ed S. Oui, ils ont manqué le point - j'essayais de comprendre.


@Bradboyce Cependant, j'ai dû lire votre question plusieurs fois, avant de comprendre moi-même, il est préférable d'indiquer clairement ce que vous voulez savoir, comme si vous souhaitez supprimer la première ligne: ! String.isnullorempty (cellule. Texte) Cela causera-t-il un problème?


MADTH3 - Tu as raison aussi. En rétrospectivement, je suppose que si j'y pensais plus, j'aurais pu le comprendre. Mais MSDN ne répond pas à ma question non plus. J'ai été surpris de voir un bowvote aussi. J'essaie vraiment de faire mes questions.


@ntziolis - Merci pour la critique constructive. Je vais essayer d'être plus clair à l'avenir.


9 Réponses :


12
votes

si cell.text est null, vous auriez une exception sans ce premier chèque.


3 commentaires

Si la cellule est une zone de texte, cette propriété ne sera jamais nulle.


Ce qui pourrait aussi être atteint avec cell.text! = Null && cell.text.trim ()! = "" si vous avez toujours .net 4.0.


Remarque: la cellule est le contenu de la cellule de table HTML achié à l'aide de webDriver (mais ce n'est pas le point de la question)



8
votes

in .NET 4.0: xxx pré>

dans les anciennes versions, vous devez conserver les deux tests car si vous supprimez le premier et cell.text code> est null, vous allez Obtenez un NRE sur la seconde lorsque vous essayez d'invoquer .trim code> sur une instance NULL. P>

ou vous pouvez également faire cela: p> xxx pré>

ou même mieux, vous pouvez écrire un Méthode d'extension pour le type de chaîne qui le fera de manière à ce que vous puissiez simplement: P>

public static class StringExtensions
{
    public static bool IsNullOrWhiteSpace(this string value)
    {
        return string.IsNullOrEmpty((value ?? string.Empty).Trim());
    }
}


1 commentaires

Je ne pense pas qu'une méthode d'extension est meilleure dans cette situation. En règle générale, "n'acceptez pas NULL comme paramètre de méthode d'extension valide". Les autres programmeurs peuvent interpréter cela comme «le texte doit avoir une valeur car une méthode pouvait être appelée».



0
votes

Je crois que le test est de s'assurer que Cell.Text n'est pas null d'abord ... Si tel est le cas, essayez de le contourner et d'obtenir juste cell.text.trim () étoufferait comme vous ne pouvez pas faire une garniture String null.


0 commentaires

0
votes

Pourquoi ne pas utiliser ! string.isnullorwhiteespace (call.text) et déposez les deux chèques précédents?


0 commentaires

0
votes

Vous ne pouvez pas retirer uniquement le premier islamorempty que la cellule.Text pourrait être nulle et appeler ainsi la garniture sur celle-ci lancerait et exception. Utilisez isnullorwhitepace si vous utilisez .NET 4.0 ou congé les deux vérifications.

if ((id % 2 == 0) && !string.IsNullOrWhiteSpace(cell.Text))


1 commentaires

Oui, mais cela ne répond pas à la question. Évidemment, l'OP est confondu sur la manière dont la ou les expressions de la déclaration IF sont évaluées.



0
votes

si cell.text est null, l'expression string.isnullorempty (cell.text.trim ()) lancera une exception puisqu'elle tente d'exécuter la garniture de la méthode () sur la cellule.

beaucoup plus lillé si la condition serait: cell.text! = null && cell.text.trim ()! = ""


0 commentaires

7
votes

Le premier Isnullorempty attrape des valeurs nulelles avant de jeter une nullreferenceException avec la garniture ().

Cependant, il existe une meilleure façon: p>

if ((id % 2 == 0) && !string.IsNullOrWhiteSpace(cell.Text))


0 commentaires

1
votes

Vous pouvez utiliser une méthode d'extension comme celle-ci:

/// <summary>
/// Indicates whether the specified string is null or empty.
/// This methods internally uses string.IsNullOrEmpty by trimming the string first which string.IsNullOrEmpty doesn't.
/// .NET's default string.IsNullOrEmpty method return false if a string is just having one blank space.
/// For such cases this custom IsNullOrEmptyWithTrim method is useful.
/// </summary>
/// <returns><c>true</c> if the string is null or empty or just having blank spaces;<c>false</c> otherwise.</returns> 
public static bool IsNullOrEmptyWithTrim(this string value)
{
    bool isEmpty = string.IsNullOrEmpty(value);
    if (isEmpty)
    {
        return true;
    }
    return value.Trim().Length == 0;
}


0 commentaires

0
votes

Nous pouvons utiliser NULL conditional: xxx

note "?" Avant de lire la propriété suivante et couper.


0 commentaires