2016-08-19 63 views
0

這個調用語句有沒有用C#我怎樣才能創造一個通用的方法使用C#

string a = Program.GenericTester(walter => walter.GetDetails(), dog);//calling statement 
Console.WriteLine("Result A: {0}", a); 
int b = Program.GenericTester(snowball => snowball.Age, cat); 
Console.WriteLine("Result B: {0}", b); 
+0

上午總因爲失去了對使用C#我剛剛得到這個作爲考覈 – Derick

+0

那麼你需要證明GenericTester是什麼以及GetDetails首發的第一次。 – sr28

+0

哪些部分應該是通用的,哪些是約束條件? – grek40

回答

0

至於評論這個調用語句創建一個通用的方法的任何方式,我認爲以下組成:catdog具有不同類型,walter的類型等於dog的類型,snowball的類型等於cat的類型,而GenericTester返回類型等於第一個參數輸入函數的返回類型。

一個可能的泛型方法簽名會

public static TResult GenericTester<TSource, TResult>(Func<TSource, TResult> func, TSource item) 
{ 
    // ... 
    return func(item); 
} 

或者,如果dogcat有一個共同的基類Animal以及該類型的唯一實例將被允許,類型restricton可以在通用強制執行參數與where子句。

public static TResult GenericTester<TSource, TResult>(Func<TSource, TResult> func, TSource item) 
    where TSource : Animal 
{ 
    // ... 
    return func(item); 
} 
+0

我感謝你的啓迪我會嘗試它,並回來給你,可能全能的上帝給你更多在你的生活 – Derick

+0

我怎麼能改變這種方法爲通用的公共靜態void ShowSomeHumanInformation(人類人類) { Console.WriteLine (「Name:」+ human.Name +「Age:」+ human.Age); } public static void ShowSomeDogInformation(Dog dog) Console.WriteLine(「Name:」+ dog.Name +「Age:」+ dog.Age); } public static void ShowSomeCatInformation(Cat cat) Console.WriteLine(「Name:」+ cat.Name +「Age:」+ cat.Age); } – Derick

+0

@Dick請不要在評論中提出新問題。一般來說,如果這是一項任務,您應該先嚐試自己解決。如果您遇到特定問題,請提出新問題並提供儘可能多的信息(工作分配)以及您的解決方案嘗試/想法。試着把問題集中在你實際需要的東西上*瞭解主題*而不是*獲得解決方案*。 (編輯:也許我錯誤評估分配^^) – grek40