2016-12-10 48 views
-1

任何人都可以解釋我,它是如何可能的。C#,.NET,字符串類

string str = "test"; 
str.Concat<> 

我調用Concat方法,但String沒有Concat使用非靜態關鍵字的方法。

public static String Concat(object arg0); 
public static String Concat(IEnumerable<String> values); 
public static String Concat(params String[] values); 
public static String Concat(params object[] args); 
public static String Concat(String str0, String str1); 
public static String Concat(object arg0, object arg1); 
public static String Concat(String str0, String str1, String str2); 
public static String Concat(object arg0, object arg1, object arg2); 
public static String Concat(String str0, String str1, String str2, String str3); 
public static String Concat(object arg0, object arg1, object arg2, object arg3); 
public static String Concat<T>(IEnumerable<T> values); 

這是String類所有的Concat重載方法。

如果這一切都靜什麼方法我剛剛叫,沒有對任何的毗連重載方法與

回答

4

如果您已包含System.Linq那麼您將看到擴展方法Concat<char>。這是因爲System.String實現了IEnumerable<char>接口,並且LINQ擴展方法在該類型上定義。

1

您沒有提供完整的代碼非static關鍵字,但我懷疑你是在調用Enumerable.Concat<char> ,由System.Linq.Enumerable提供的通用extension method,延伸IEnumerable<T>。這是有效的,因爲string執行IEnumerable<char>。例如:

IEnumerable<char> sequence = "abc".Concat("def"); 
foreach (var element in sequence) 
{ 
    Console.WriteLine(element); // Prints a, then b, then c, then d, then e, then f 
} 

注意sequence的字符串。