2012-07-31 32 views
0

Techies-- 我想我正確地爲Split定義了這個靜態擴展,我顯然不是因爲消息:擴展方法必須在非泛型靜態類中定義。靜態/通用/非通用定義錯誤

這是一個簡單的c#控制檯程序來測試一些東西。以下是我的:

class Program 
{ 
    static int Main(string[] args) 
    { 
    int[] numbers = new int[10000]; 
      for (int i = 0; i < numbers.Length; ++i) 
       numbers[i] = i; 

    int[][] sectionedNumbers = numbers.Split(1000); 
    . 
    . //blah blah blah .. rest of code 

return 0; 
} 

public static T[][] Split<T>(this T[] arrayIn, int length) 
{ 
    bool even = arrayIn.Length % length == 0; 
    . 
    . 
    . // blah blah .. more code 

    return newArray; 
    } 

這是什麼,我做錯了?

回答

1

你好你的容器類必須是靜態的

設置你的方法在靜態類

public static class Extension 
{ 
public static T[][] Split<T>(this T[] arrayIn, int length) 
{ 
    bool even = arrayIn.Length % length == 0; 
    . 
    . 
    . // blah blah .. more code 

    return newArray; 
    } 

} 
+0

有一個'class'關鍵字在你的類聲明中缺少。 – 2012-07-31 15:22:54

2

該錯誤消息的要求你Program類也不是一成不變的。

  • static指令添加到類聲明:

    static class Program 
    { 
        // ... 
    
  • 或移動Split到另一個靜態類完全。

然後你的代碼應該再次編譯。

+0

O.R. Mapper - 非常感謝,我甚至忘了看程序def ...我waayyy專注於擴展代碼。我全部修好了!:-) – plditallo 2012-07-31 16:02:43

+0

@plditallo:如果您的問題得到解決,您可以接受這個或其他等效答案嗎?謝謝。 – 2012-08-01 06:50:56

1

您需要定義您的擴展方法在一類,像這樣:

public static class ArrayExtensions 
{ 
public static T[][] Split<T>(this T[] arrayIn, int length) 
{ 
    bool even = arrayIn.Length % length == 0; 
    . 
    . 
    . // blah blah .. more code 

    return newArray; 
    } 
}