15
A
回答
23
假設你有一個函數,例如:
private static string toLower(string s)
{
return s.ToLower();
}
有System.Func的一個版本,有兩個通用的參數,第一個是第一個參數的類型,第二個是返回類型。因此,你可以寫:
Func<string,string> myFunction = toLower;
string s = myFunction("AsDf");
// s is now "asdf"
在System.Func的所有版本,最後一個通用的說法是返回類型,所有的人都在參數類型,爲了。
System.Func是有用的,因爲它不需要您編寫自定義委託類型。這使得代理簽名相同變得更容易。
說我有:
public delegate string MyDelegate1(string s);
public delegate string MyDelegate2(string s);
MyDelegate1 myDel = new MyDelegate1(toLower); // toLower as above
現在有沒有辦法CONVER我MyDelegate1委託類型MyDelegate2的對象,即使他們有相同的方法簽名。在另一方面,如果我們使用,而不是宣佈自定義委託類型Func鍵,我們就沒有這個問題
5
System.Func<T>
通常被用作一個參數傳遞給另一功能。它可以是任何返回值爲T的委託 - 並且有多個版本可用作具有多個參數的委託。
一個常見用法是用於過濾 - 例如,在LINQ中,您可以傳遞一個函數以用作Enumerable.Where函數中的過濾器來限制集合。例如:
public bool FilterByName(string value)
{
return value.StartsWith("R");
}
// .. later
List<string> strings = new List<string> { "Reed", "Fred", "Sam" };
var stringsStartingWithR = strings.Where(FilterByName);
然而,在上述情況下,你會更容易使用lambda表達式的基礎上繼續飛Func<string,bool>
,如:
var stringsStartingWithR = strings.Where(s => s.StartsWith("R"));
2
void Foo()
{
Func<object, bool> func = Bar;
bool b1 = func(new object()); // b1 is true
bool b2 = func(null); // b2 is false
}
bool Bar(object o)
{
return o == null;
}
0
用它來表示有返回值的任何委託類型。
1
1)創建一個具有一個參數和一個返回值的Func實例。 2)具有兩個參數和一個結果的Func實例。接收bool和int,返回字符串。 3)Func實例沒有參數和一個結果值。 4)在匿名函數上調用Invoke實例方法。
using System; 類節目{靜態無效的主要(){
Func<int, string> func1 = (x) => string.Format("string = {0}", x);
Func<bool, int, string> func2 = (b, x) =>
string.Format("string = {0} and {1}", b, x);
Func<double> func3 =() => Math.PI/2;
Console.WriteLine(func1.Invoke(10));
Console.WriteLine(func2.Invoke(true, 20));
Console.WriteLine(func3.Invoke()); } }
相關問題
- 1. 不能鍵入 '表達<System.Func <TP,Action>>' 轉換爲 '表達<System.Func <TP,BasePageElement >>'
- 2. 代表「System.Func <Testproj.pInfo,int,bool>不帶1個參數」
- 3. 代表System.Func <dbPSRModel.tbProject,int,bool>不接受1個參數
- 4. 代表'System.Func <int,int,string>'不帶1個參數
- 5. 在F#中將System.Func <>轉換爲FastFunc <>
- 6. C#轉換System.Func <Tderived,布爾>到系統/功能<Tbase, bool>
- 7. C#顯示錯誤「委託 'System.Func <...>' 不拿1個參數
- 8. 不能含蓄轉化類型System.Linq.Expression <System.Func <對象,布爾>>爲bool
- 9. 無法將表達式類型'lambda表達式'轉換爲返回類型'System.Linq.Expressions.Expression <System.Func <IProduct,string,bool >>'
- 10. 無法將lambda表達式轉換爲委託類型'System.Func <char,bool>'
- 11. 無法從方法組轉換爲System.Func <string>
- 12. 如何使用代表在C#字典<INT,列表<string>>
- 13. 無法將lambda表達式轉換爲委託類型'System.Func <T,TKey>'
- 14. 將異步lambda表達式轉換爲委託類型System.Func <T>?
- 15. 在java中代表<< or > >>是什麼意思?
- 16. Java <-> C <-> Fortran
- 17. 「<%= VARIABLE%>」代表什麼?
- 18. C#httplistener解析<% c# %>代碼
- 19. C#列表<>爲xml
- 20. C#列表<object>
- 21. Java列表<?>在C#
- 22. C#JSON從列表<>
- 23. C#XML列表<int>
- 24. 從列表<>在C#
- 25. 在列表<string> C#
- 26. c#randomize列表<action>
- 27. 列表<T>在IEnumerable類代表<T>
- 28. C#搜索列表<t>另一個列表<T>
- 29. C#列表<string[]>至列表<object[]>轉換
- 30. 將列表<int>轉換成列表<float>? C#
技術上,。凡()請求一個謂詞委託。但既然這只是Func的一個特例,你沒關係。 – 2009-08-21 19:23:15
喬爾:沒有。 Enumerable.Where(Of(TSource))(IEnumerable(Of(TSource)),Func(Of(TSource,Boolean)))請參閱:http://msdn.microsoft.com/zh-cn/library/system.linq。 enumerable.where.aspx – 2009-08-21 19:26:55
它具體定義爲Func –
2009-08-21 19:27:52