में कनवर्ट करें I am अटक गया है।एक्शन <T> एक्शन <object>
मैं Action<T> to an Action<Object>
को सी # में कैसे परिवर्तित करूं?
सादर मैगनस
में कनवर्ट करें I am अटक गया है।एक्शन <T> एक्शन <object>
मैं Action<T> to an Action<Object>
को सी # में कैसे परिवर्तित करूं?
सादर मैगनस
यहाँ तुम क्या के लिए पूछने का एक नमूना है (अंतिम पंक्ति में जोड़ा जा सकता है प्रकार की जांच ठीक से अवैध डाली अपवाद को संभालने के लिए होने के लिए और अधिक उपयोगकर्ता के अनुकूल):
public Action<object> Convert<T>(Action<T> myActionT)
{
if (myActionT == null) return null;
else return new Action<object>(o => myActionT((T)o));
}
हो सकता है आप के बारे में अधिक जानकारी दे सकते हैं हालांकि कार्य, क्योंकि अभी यह थोड़ा अजीब लग रहा है।
सुनिश्चित नहीं हैं कि परिवर्तित करके क्या मतलब है ... लड़ाई एक कार्रवाई प्रतिनिधि के जेनेरिक घोषणा है ... यदि आप एक कार्रवाई प्रतिनिधि है कि 'वस्तु' पर काम करता है चाहते हैं आप की तरह कुछ करना होगा :
var myAction = new Action<object>(obj=> ...);
मुझे लगता है आप कुछ इस तरह है:
void Foo(Action<object> action) { }
Action<something> myaction;
और myaction कन्वर्ट करने के लिए ताकि आप इसे फू करने के लिए पारित कर सकते हैं चाहता हूँ।
यह काम नहीं करता है।
फू किसी ऑब्जेक्ट को उस क्रिया से पास कर सकता है जिसका प्रकार ऑब्जेक्ट से प्राप्त होता है। लेकिन रहस्य केवल उन वस्तुओं को स्वीकार करता है जो कुछ से प्राप्त होते हैं।
मैं आज ऐसा करने का एक तरीका ढूंढ रहा था और इस पोस्ट पर ठोकर खा रहा था। असल में, मुझे ऐसा करने का एकमात्र आसान तरीका एक्शन < स्ट्रिंग > को एक नई एक्शन < ऑब्जेक्ट > में लपेटना था। मेरे मामले में, मैं अपनी क्रियाओं को एक समवर्ती शब्दकोश में दबा रहा था, और फिर उन्हें प्रकार से पुनर्प्राप्त कर रहा था। प्रभावी रूप से, मैं संदेशों की एक कतार संसाधित कर रहा था जहां विशेष टाइप किए गए इनपुट वाले संदेशों को संभालने के लिए क्रियाओं को परिभाषित किया जा सकता था।
var _actions = new ConcurrentDictionary<Type, Action<object>>();
Action<string> actionStr = s => Console.WriteLine(s);
var actionObj = new Action<object>(obj => { var castObj = (V)Convert.ChangeType(obj, typeof(V)); actionStr(castObj); });
_actions.TryAdd(typeof(string), actionObj);
प्रश्न यह नहीं समझता है कि आप कोई कार्रवाई नहीं बना सकते हैं, आपको एक प्रकार निर्दिष्ट करना होगा। –
उन covariance/contravariance प्रश्नों में से एक का अनुमान लगाया, अन्यथा जवाब 'एक्शन
जब तक टी कक्षा तक सीमित नहीं है, तब तक आप ऑब्जेक्ट में एक खुले जेनेरिक प्रकार नहीं डाल सकते हैं। कोड में, एक्शन एक्शन