मैं गतिशील रूप से जेनरेट किए गए कोड का थोड़ा सा निर्माण करने के लिए अभिव्यक्ति का उपयोग कर रहा हूं। मेरा समाधान काम करता है, एक सुविधा को छोड़कर: मैं एक चेक प्रकार-कास्ट करना चाहता हूं, जहां कास्ट विफल होने पर TypeCastException फेंक दिया जाता है।अभिव्यक्ति वृक्ष में चेक-कास्ट चेक किया गया?
मुझे अभिव्यक्ति मिली है। टाइप(), जो टाइप रूपांतरण करता है, लेकिन जब फेंकने में विफल रहता है, तो यह फेंकने की बजाए शून्य हो जाता है।
क्या अभिव्यक्ति में चेक-प्रकार कास्ट करने का कोई आसान तरीका है? या क्या मुझे नल की जांच करनी है और खुद को अपवाद फेंकना है?
यहाँ मैं क्या है: -
ParameterExpression typedAttribute = Expression.Variable(attributeType, "typedAttribute");
ParameterExpression typedValue = Expression.Variable(valueType, "typedValue");
BlockExpression methodBlock = Expression.Block(new[] { typedAttribute, typedValue }, new Expression[]
{
Expression.Assign(typedAttribute, Expression.TypeAs(attribute, attributeType)),
Expression.Assign(typedValue, Expression.TypeAs(value, valueType)),
Expression.Call(visitor, methodInfo, typedAttribute, typedValue),
Expression.Assign(visited, Expression.Constant(true)),
});
धन्यवाद, यह काम करता है। मुझे वास्तव में अभिव्यक्ति की कोशिश करना याद है। पहले() पहले, लेकिन मुझे लगता है कि उस समय मेरे कोड में एक और त्रुटि थी, जिसने मुझे यह देखने से रोका कि यह सही समाधान था। वैसे भी, एक निश्चित उत्तर बहुत जल्दी है! – PeteAC
वहाँ एक तेज कास्ट है? मैं संकलित सेटर्स/गेटर्स बना रहा हूं लेकिन ऑब्जेक्ट करने के लिए बॉक्सिंग अनबॉक्सिंग सब कुछ धीमा कर देता है .. –
@ डेमेट्रिस तब: बॉक्स किए गए डेटा का उपयोग न करें ... संदर्भ के बिना उससे अधिक कहना मुश्किल है –