7
votes

Pourquoi cette méthode d'extension ne fonctionne-t-elle pas?

public static string ToTrimmedString(this DataRow row, string columnName)
{
    return row[columnName].ToString().Trim();
}
Compiles fine but it doesn't show up in intellisense of the DataRow...

4 commentaires

montre à IntelliSense dans mon VS10. juste le testé.


Veuillez afficher la ligne incomplète où vous essayez d'appeler la méthode de poste.


Aussi: soyez prudent, si la ligne ne contient aucune colonne par le nom de colleName Vous finirez par avoir une exception - vous voudrez peut-être vérifier cela et retour null ou une chaîne vide si c'est le cas


@marc_s absolument, c'était juste pour la simplicité ...


5 Réponses :


9
votes

Assurez-vous que cette méthode est dans un classe statique code> de sa propre classe distincte de la base de datarow consommant.

using MyProject.Extensions


1 commentaires

Je ne pense pas que cela compilait s'il n'y avait pas dans une classe statique



23
votes

Je suppose que vous n'avez pas inclus l'espace de noms.


3 commentaires

à l'aide de system.data; est inclus ... Pensez-vous qu'il compilerait si à l'aide du système.data; n'a pas été inclus?


L'espace de noms de la classe qui a la méthode d'extension.


Cela pourrait être, la classe à partir duquel j'essaye d'utiliser la méthode est un espace de noms «sous» de l'espace de noms la méthode d'extension est dans ... acceptera si cela s'avère être le problème ... Merci d'avoir clarifié ...



2
votes

J'ai eu ce même problème. Mon erreur n'était pas que j'ai manqué la classe statique ou la méthode statique, mais que la classe mes extensions était sur n'était pas publique.


0 commentaires

0
votes

En plus d'une utilisation manquante, le cas échéant, avec le même symptôme peut se produire: Si vous êtes à l'intérieur d'une méthode de la classe elle-même (ou d'une personne Si ses implémentations / héritiers), vous devez utiliser ceci code>.

Extension de fichier.cs: p>

namespace a 
{

    class A {}

    class B : A 
    {
        this.AExt();
        // AExt() will not work without this.
    }
}


0 commentaires

0
votes

Si vous utilisez différents espaces de noms, essayez ce code.

namespace Extensions
{
    public static class StringExtensions
    {
        public static bool IsNumeric(this string inputString)
        {
            return decimal.TryParse(inputString, out decimal result);
        }
    }
}

namespace Business
{

    // add here other namespaces
    using Extensions;
    public static class Tools
    {
        public static bool Check(string inputString)
        {
            return inputString.IsNumeric();
        }
    }
}


0 commentaires