IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[CustomException] FxCop indique une erreur étrange


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 92
    Points : 83
    Points
    83
    Par défaut [CustomException] FxCop indique une erreur étrange
    Bonjour,

    J'ai testé l'utilisation d'une Expression (System.Linq.Expressions) dans le cas d'une exception personnalisée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    [Serializable]
    public PropertyException<T> : Exception, ISerializable
    {
        public PropertyException(Expression<Func<T, object>> propertySelector)
            : base(GetMessage(propertySelector)) { }
     
        static string GetMessage(Expression<Func<T, object>> propertySelector)
        {
            MemberExpression memberExpr = (MemberExpression)propertySelector.Body;
     
            return String.Format(CultureInfo.InvariantCulture,
                                 MyResources.PropertyErrorMessage,
                                 memberExpr.Member.Name); // propertyName
        }
        [...]
    }
    Cela compile mais FxCop m'indique une erreur critique "DoNotNestGenericTypesInMemberSignatures".
    La description m'indique le texte suivant :
    Resolution : "Consider a design where
    'PropertyException<T>.PropertyException(Expression<Func<T, object>>)'
    doesn't nest generic type 'Expression<Func<T, object>>'."

    Info : "Avoid API that require users to instantiate a generic
    type with another generic type as type argument. The
    syntax gets too complex."
    Je sais qu'FxCop n'est là que pour aider/conseiller lors du developpement.
    Mais je ne comprends pas en quoi la syntaxe est trop complexe ?

    A l'utilisation on obtient un code plutôt simple je trouve :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public string DoSomething(MyClass myObject)
    {
        if (myObject == null)
            throw new ArgumentNullException("myObject");
     
        if (myObject.Id == null)
            throw new PropertyNullException<MyClass>(o => o.Id);
     
        [...]
    }

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 92
    Points : 83
    Points
    83
    Par défaut
    Pour retirer l'erreur critique, j'ai modifié le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    [Serializable]
    public PropertyNullException<TDelegate> : Exception, ISerializable
    {
        public PropertyNullException(Expression<TDelegate> propertySelector)
            : base(GetMessage(propertySelector)) { }
     
        static string GetMessage(Expression<TDelegate> propertySelector)
        {
            MemberExpression memberExpr = (MemberExpression)propertySelector.Body;
     
            return String.Format(CultureInfo.InvariantCulture,
                                 MyResources.PropertyErrorMessage,
                                 memberExpr.Member.Name); // propertyName
        }
        [...]
    }
    Mais à l'utilisation, je trouve ça justement plus complexe qu'auparavant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public string DoSomething(MyClass myObject)
    {
        if (myObject == null)
            throw new ArgumentNullException("myObject");
     
        if (myObject.Id == null)
            throw new PropertyNullException<Func<MyClass, Guid>>(o => o.Id);
     
        [...]
    }
    Bref voiloù, c'est résolu.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 92
    Points : 83
    Points
    83
    Par défaut
    Je ne sais pas si c'est utile mais j'ai rajouté une condition au type TDelegate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [Serializable]
    public PropertyNullException<TDelegate> : Exception, ISerializable
        where TDelegate : LambdaExpression
    {
        [...]
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Une erreur étrange lors de l'importation d'une bdd
    Par binco dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 09/06/2015, 10h37
  2. mises-à-jour impossibles: dpkg indique une erreur
    Par Celano dans le forum Administration système
    Réponses: 5
    Dernier message: 02/03/2012, 18h30
  3. Une erreur étrange
    Par Gamall dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 25/09/2009, 18h28
  4. Une erreur bien étrange..
    Par [gR]Ronin dans le forum Excel
    Réponses: 5
    Dernier message: 31/03/2008, 08h49
  5. Réponses: 2
    Dernier message: 09/06/2006, 14h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo