मेरे पास निम्न कोड है:
using System;
using System.Linq;
using System.Linq.Expressions;
public class Program
{
public static void Main()
{
Descendant d = new Descendant();
d.TestMethod();
}
}
public class Base
{
protected void FigureItOut(Expression> expr)
{
}
}
public class Descendant : Base
{
public void TestMethod()
{
FigureItOut(c => c.Name);
}
public String Name { get; set; }
}
मुझे यह कंपाइलर त्रुटि संदेश मिलता है:
The type arguments for method
'Base.FigureItOut
(System.Linq.Expressions.Expression>)'
cannot be inferred from the usage. Try specifying the type arguments explicitly.
अगर मैं इस पर चित्रा ITOut को कॉल बदलता हूं:
FigureItOut((Descendant c) => c.Name);
फिर यह काम करता है। इसके बजाय बेस क्लास को बदलकर संकलित करने का पहला उदाहरण प्राप्त करने का कोई तरीका है?
मुझे पता है कि अगर मैं पूरी बेस क्लास जेनेरिक बनाता हूं, तो इस तरह:
public class Base<tdescendant>
{
protected void FigureItOut(Expression> expr)
{
}
}
public class Descendant : Base
{
public void TestMethod()
{
FigureItOut(c => c.Name);
}
public String Name { get; set; }
}
फिर यह काम करता है, लेकिन मैं ऐसा नहीं करता, किसी अन्य हैक्स को नियोजित किया जा सकता है, शायद विधि स्तर पर (यानी किसी भी तरह से चित्रा ItOut बदलें)।