2010-11-27 22 views
3

ceci est mon code: Le code travaillé avec les premiers + deuxième paramètres, quand j'ai ajouté la 3e paramter ne compile pas plus, que dois-je changer pour le faire fonctionner?Ne peut pas déduire le type en C#, doivent fixer explicitement?

/// <summary> 
     /// Binds all dataObjects e.g. IPersonList, IDepartmentList, ITopicList... and creates a visual list of elements to display in the ElementTextBox 
     /// </summary> 
     /// <typeparam name="T">Type of dataObject in the dataObjects list</typeparam> 
     /// <typeparam name="TProperty">value for the Type specified by the TResult paramter</typeparam> 
     /// <param name="dataObjects">entity from database the user wants to show in the ElementTextBox</param> 
     /// <param name="selectorDisplayMember">The property like FirstName that is shown as the elements text</param> 
     /// <param name="selectorSortMember">The property like SortId that is used to pre-sort the dataObjects so the elements appear in the order before they were saved</param> 
     public void BindElements<T, TProperty>(IEnumerable<T> dataObjects, Func<T, TProperty> selectorDisplayMember, Func<T, TProperty> selectorSortMember) 
     { 
      if (dataObjects != null) 
      { 
       var sortedDataObjects = from d in dataObjects 
             orderby selectorSortMember(d) ascending 
             select d; 

       Paragraph para = new Paragraph(); 

       foreach (T item in dataObjects) 
       { 
        TProperty displayMemberValue = selectorDisplayMember(item); 
        InlineUIContainer uiContainer = ElementList.CreateElementContainer(displayMemberValue); 
        para.Inlines.Add(uiContainer); 
       } 

       FlowDocument flowDoc = new FlowDocument(para); 
       ElementList.Document = flowDoc; 
      }    
     } 

cela a fonctionné: ElementUserControl.BindElements(customers, c => c.CustomerId);

mais quand j'ai ajouté le 3ème paramter:

ElementUserControl.BindElements(customers, c => c.CustomerId, c => c.SortId); 

Il ne fonctionnait plus?

+0

Je pense que vous devez également nous montrer la surcharge de 'BindElements' qui chapeau * deux * paramètres (la surcharge pour laquelle le type a été inféré avec succès) – AakashM

+0

Il n'y a pas de surcharge. La méthode avec les deux paramètres est juste au-dessus de juste enlever le code au début qui trie les objets de données. Mais le problème semble être le numéro de paramètre 3. – Elisabeth

+0

Quelle est l'erreur de compilation? –

Répondre

7

Le problème réside dans l'ambiguïté que vous présentez, puisque les deux le 2ème et le 3ème paramètre peut déduire TProperty. Vous voudrez peut-être essayer d'introduire un troisième paramètre de type générique afin que vous ayez TDisplayProperty et TSortProperty qui devrait être correct pour votre cas d'utilisation.

+0

Fonctionne! n'a pas 100% comprendre ce que j'ai fait MAINTENANT je sais :) thx Lucero! – Elisabeth