2011-05-11 41 views
1

我的控制檯應用程序:爲什麼我的C#擴展方法在這個控制檯應用程序中工作?

namespace LicenceCreator 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
     }  

     public static string TrimTextAndAppendDots(
      this string stringArg, int maxLengthArg) 
     { 
      string retString; 

      if (stringArg.Length > maxLengthArg) 
      { 
       retString = stringArg.Substring(0, maxLengthArg) + "..."; 
      } 
      else 
      { 
       retString = stringArg; 
      } 

      return retString; 
     } 
    } 
} 

但由於某些原因的擴展方法心不是拿起當我在main方法中的任何想法,爲什麼把它從一個字符串?

+0

難道你把一個斷點,看看有什麼確切的問題......? – Misam 2011-05-11 09:11:04

+0

@Misam這是一個彙編問題,你如何設置一個斷點? – 2011-05-11 09:13:46

+1

請顯示一個簡短的*完整*程序 - 目前您已經展示了一個沒有封閉類的方法,並且沒有嘗試調用它的例子。 – 2011-05-11 09:16:48

回答

4

我猜測「沒有拿起」,你的意思是「編譯器抱怨它找不到它」。然後:

擴展方法必須位於「靜態」類中,並且必須具有指向該類名稱空間的「using」指令。你做?

如果是「編譯器不抱怨,但該字符串不改變」,那麼也許你在呼喚它作爲

myString.TrimTextAndAppendDots(10); 

,而不是

myString = myString.TrimTextAndAppendDots(10); 
+0

對不起,我應該說擴展方法是在'程序'分類.... – Exitos 2011-05-11 09:21:06

+0

@ Pete2k:在這種情況下,答案很簡單:C#不允許您指定非靜態類中的擴展方法。將擴展方法移到它自己的類(一個靜態類)。 – Steven 2011-05-11 10:15:04

2

擴展方法必須在聲明一個靜態類。

  • 擴展方法的類是靜態的嗎?

爲了調用擴展方法,聲明類的命名空間必須引用:

  • 您已經添加類集引用?
  • 你是否爲擴展方法class'namespace聲明瞭相應的「using」語句?

UPDATE:

回答您的意見,我覺得我的答案反正是正確的,但現在我們可以添加:

  • 是您的 「程序」 類的靜態? ;)
+0

對不起,我應該說擴展方法是在'節目'分類.... – Exitos 2011-05-11 09:20:22

+0

檢查我的更新:) – 2011-05-11 09:23:32

0

擴展必須要對一個靜態類,就像這樣:

public static class StringExtension 
{ 
    public static string TrimTextAndAppendDots(this string stringArg, int maxLengthArg) 
    { 
     string retString = ""; 

     if (stringArg.Length > maxLengthArg) 
     { 
      retString = stringArg.Substring(0, maxLengthArg) + "..."; 
     } 
     else 
     { 
      retString = stringArg; 
     } 

     return retString; 
    } 
} 

最後,你有using語句聲明StringExtension無論你想使用該擴展方法

相關問題