2013-06-05 5 views
12

में एक विस्तार विधि को परिभाषित करने के लिए कैसे मैं ScriptCS (जो कि कमाल है!) के साथ खेल रहा हूं, लेकिन मैं को किसी .csx स्क्रिप्ट फ़ाइल के भीतर एक एक्सटेंशन विधि को परिभाषित करने का तरीका नहीं समझ सका।एक स्क्रिप्ट सीएसएक्स स्क्रिप्ट

using System.IO; 

public static class Extensions 
{ 
    public static string Remove(this string source, params string[] toRemove) 
    { 
     foreach(var r in toRemove) 
     { 
      source = source.Replace(r,""); 
     } 
     return source; 
    } 
} 

string[] entries = 
    Directory 
     .GetFiles(
      @"C:\Users\blah\blah", 
      "*.mp4", 
      SearchOption.AllDirectories) 
    .Select(p => p.Remove("Users")) 
    .ToArray(); 

foreach(var e in entries) 
{ 
    Console.WriteLine(e); 
} 

यह त्रुटि पैदावार:

इस उदाहरण लें

error CS1109: Extension methods must be defined in a top level static class; Extensions is a nested class

मेरा अनुमान है कि कि ScriptCS कुछ वर्ग जो एक्सटेंशन नेस्ट किए जाने की खड़ी कर रहा है में सीएसएक्स लपेटता, वहाँ किसी भी है इस के आसपास रास्ता?

+1

यह रोज़लिन में एक सीमा है। देखें: http://social.msdn.microsoft.com/Forums/en-US/roslyn/thread/7c0a18eb-d37a-40e2-a26c-edb59b8f5cf3/। तो वर्तमान में आप '.csx' फ़ाइलों में एक्सटेंशन विधियों को परिभाषित नहीं कर सकते हैं। आपको उन्हें एक डीएल में डालना होगा और डीएलएल को संदर्भित करना होगा। – nemesv

+0

इस @nemesv का जवाब योग्य =) धन्यवाद – TJB

उत्तर

18

मैं अपने दर्द महसूस होता है।

वास्तव में इस रोसलिन की एक सीमा है कि यह एक वर्ग में सब कुछ लपेटता वर्तमान के रूप में भले ही वह किसी अन्य वर्ग है।

मैं रोसलिन टीम के लिए हालांकि बात की है और वे जल्दी ही विस्तार तरीकों का समर्थन करने जा रहे हैं।

+2

इस मुद्दे में 3 साल बाद भागें: हमें "जल्द" शब्द को कैसे समझना चाहिए? – fra

+0

यह एक अच्छा सवाल है। हम Roslyn (2.0) के नवीनतम संस्करण में अपडेट करने जा रहे हैं। मुझे पता चलेगा कि क्या उसने सीएसएक्स के भीतर विस्तार विधियों के लिए समर्थन जोड़ा है। –

+0

इस पर अपडेट – fra

2

दुर्भाग्य से, क्योंकि मक्खी पर कुछ संकलन एक वर्ग की आवश्यकता है, scriptcs कच्चे कोड कि अहमियत लेने के लिए और एक वर्ग में लपेट के लिए डिजाइन किया गया था। आपको अपनी आवश्यकताओं के लिए scriptcs के संस्करण को संशोधित करने की आवश्यकता होगी - या contributing to the project पर विचार करें।

हालांकि, मैं भी प्यारscriptcs और लगता है कि यह वहाँ बाहर आज सबसे शानदार परियोजनाओं में से एक है!

मैं भी इस जब scriptcs के प्रयोग पर जल्दी की कोशिश की और मेरा दिल तोड़ दिया, जब यह काम नहीं किया। अगर मेरे पास अधिक बैंडविड्थ था तो मैं इस जोड़ को अपने आप में योगदान दूंगा।

AFAIK इस रोसलिन के साथ एक सीमा नहीं है।

+1

यह रोसलिन पटकथा एपीआई में एक सीमा है लग रहा है। –