2009-05-13 10 views
8

मैं समाधान में सभी एक्सटेंशन विधियों को कैसे ढूंढ सकता हूं? , प्रयोग का एक छोटा सा के बाद: अपने खोज स्ट्रिंग अपने प्रारूपण विकल्पों के आधार पर भिन्न हो सकता हैमैं समाधान में सभी एक्सटेंशन विधियों को कैसे ढूंढ सकता हूं?

संपादित -

उत्तर

6

अगर मैं मैं स्ट्रिंग के लिए सभी फाइलों को खोज करेंगे यह क्या कर रहे थे "(इस"। निम्नलिखित लगता है उच्च परिशुद्धता का उपयोग कर "फ़ाइलें में खोजें" के साथ मेरे लिए काम करने के लिए (Ctrl-Shift-F)

  • खोज स्ट्रिंग: "\(this [A-Za-z]" (ऋण उद्धरण, निश्चित रूप से)
  • मैच केस: अनचेक
  • मैच पूरे शब्द: अनचेक
  • उपयोग: रेगुलर एक्सप्रेशन इन फ़ाइल प्रकारों पर
  • देखो: "* .cs"
+0

"इस" अक्सर एक तर्क के रूप में पारित हो जाता है - मुझे लगता है कि आप "(इस प्रकार के नाम" पैटर्न मिलान करने के लिए, जिसके बाद आवश्यकता होगी " , "या") ", और मध्य में किसी भी प्रकार की सफेद जगह के साथ। एक साधारण रेगेक्स नहीं (मैंने कोशिश भी नहीं की ...) –

+0

हां, लेकिन मेरे स्वरूपण में यह "(यह,", नहीं "(यह" तो यह मेल नहीं करेगा। – tvanfosson

+0

... जब यह है एकमात्र तर्क, तो शायद "(यह [ए-ज़ा-जेड]" के साथ एक रेगेक्स, हालांकि मैंने इसे अपने समाधानों में से एक पर चलाया और केवल 3 उदाहरणों को एक तर्क के रूप में पारित किया और 50 या तो विस्तार विधियां (बहुत एमवीसी के लिए एचटीएमएल हेल्पर एक्सटेंशन) – tvanfosson

1

तुम सिर्फ sourcecode जाँच (सिर्फ फाइलों में (this ... के लिए देखो) करना चाहते हैं या प्रतिबिंब द्वारा आपके चल रहे प्रोग्राम (इस मामले में, यह this चर्चा आपकी मदद कर सकती है)?

+0

हाँ। ब्रैकेट और 'यह' के बीच व्हाइटस्पेस और न्यूलाइन के बारे में भूलना नहीं है। –

2

शायद इस आलेख में कोड how to find extension methods targeting object का उपयोग किया जा सकता है? उदाहरण के लिए थोड़ा सा लिखा जा सकता है और object को लक्षित करने वाले लोगों के बजाय सभी एक्सटेंशन विधियों को डंप करने के लिए इसका उपयोग करें।

1

आपकी कोडिंग शैली से मेल खाने वाले रेगेक्स के साथ समाधान विस्तृत टेक्स्ट खोज। "(*this +" जैसे कुछ (कुछ त्रुटि टोलरेंस प्राप्त करने के लिए पहली वैकल्पिक जगह जोड़ा गया)।

5

मैं प्रतिबिंब का उपयोग करके उत्पन्न असेंबली को देखता हूं; स्थिर [ExtensionAttribute] साथ तरीकों की तलाश में प्रकार के माध्यम से पुनरावृति ...

static void ShowExtensionMethods(Assembly assembly) 
{ 
    foreach (Type type in assembly.GetTypes()) 
    { 
     if (type.IsClass && !type.IsGenericTypeDefinition 
      && type.BaseType == typeof(object) 
      && type.GetConstructors().Length == 0) 
     { 
      foreach (MethodInfo method in type.GetMethods(
       BindingFlags.Static | 
       BindingFlags.Public | BindingFlags.NonPublic)) 
      { 
       ParameterInfo[] args; 

       if ((args = method.GetParameters()).Length > 0 && 
        HasAttribute(method, 
         "System.Runtime.CompilerServices.ExtensionAttribute")) 
       { 
        Console.WriteLine(type.FullName + "." + method.Name); 
        Console.WriteLine("\tthis " + args[0].ParameterType.Name 
         + " " + args[0].Name); 
        for (int i = 1; i < args.Length; i++) 
        { 
         Console.WriteLine("\t" + args[i].ParameterType.Name 
          + " " + args[i].Name); 
        } 
       } 
      } 
     } 
    } 
} 
static bool HasAttribute(MethodInfo method, string fullName) 
{ 
    foreach(Attribute attrib in method.GetCustomAttributes(false)) 
    { 
     if (attrib.GetType().FullName == fullName) return true; 
    } 
    return false; 
} 
+0

बस जोड़ने के लिए, यह ExtensionAttribute नामक कोई भी विशेषता हो सकती है, यह System.Code.dll में आपूर्ति के समान नहीं है। यह आपको .NET 2. – leppie

+0

को लक्षित करते समय इस सुविधा का उपयोग करने की अनुमति देता है; वास्तव में, मैं ' मैंने कई में उपयोग किया है LINQBridge, और MiscUtil दूसरों के बीच ... मैं इसे अपडेट कर दूंगा ... –

+1

इसे उस नामस्थान की आवश्यकता नहीं है :) ExtensionAttribute नामक कोई भी विशेषता काम करेगी। – leppie

संबंधित मुद्दे

 संबंधित मुद्दे