2011-03-02 16 views
9

नहीं ले करता है मैं बोल रहा हूँ:सी # प्रदर्शित त्रुटि 'प्रतिनिधि' System.Func <...> '1 तर्क

 form = new FormFor<Project>() 
      .Set(x => x.Name, "hi"); 

जहां परियोजना एक क्षेत्र का नाम और FormFor के कोड कहा जाता है:

public class FormFor<TEntity> where TEntity : class 
{ 
    FormCollection form; 


    public FormFor() 
    { 
     form = new FormCollection(); 
    } 

    public FormFor<TEntity> Set(Expression<Func<TEntity>> property, string value) 
    { 
     form.Add(property.PropertyName(), value); 

     return this; 
    } 
} 

लेकिन यह मुझे Delegate 'System.Func<ProjectSupport.Core.Domain.Project>' does not take 1 arguments बताता रहता है और मुझे यकीन नहीं है कि क्यों। क्या कोई मेरे लिए कुछ प्रकाश डाल सकता है?

उत्तर

18

यह इस लैम्ब्डा अभिव्यक्ति कन्वर्ट करने के लिए कोशिश कर रहा है:

x => x.Name 

एक Expression<Func<TEntity>> में।

चलिए इस पल के लिए अभिव्यक्ति वृक्ष बिट को अनदेखा करते हैं - प्रतिनिधि प्रकार Func<TEntity> एक प्रतिनिधि का प्रतिनिधित्व करता है जिसमें कोई तर्क नहीं होता है, और TEntity देता है। आपकी लैम्ब्डा अभिव्यक्ति x => x.Name स्पष्ट रूप से पैरामीटर (x) की अपेक्षा है। मुझे संदेह है कि आप

Expression<Func<TEntity, string>> 

या कुछ समान है, लेकिन यह वास्तव में स्पष्ट नहीं है कि आप क्या करने की कोशिश कर रहे हैं।

+0

यह सही है, और स्पष्टीकरण के लिए भी धन्यवाद :) – Harold

1

Func<TEntity> एक प्रतिनिधि है जो शून्य मानकों को लेता है और TEntity प्रकार का ऑब्जेक्ट देता है। आप x आपूर्ति करने और कुछ भी वापस करने की कोशिश कर रहे हैं।

3

अभिव्यक्ति का प्रकार "x => x.Name" Expression<Func<TEntity>> नहीं है, लेकिन Expression<Func<TEntity, string>> है। मुझे लगता है, आपको सेट विधि की घोषणा बदलनी चाहिए:

public FormFor<TEntity> Set<V>(Expression<Func<TEntity, V>> property, string value) 
संबंधित मुद्दे