我看到代表有两种形式:
A. Func<string, string> convertMethod = lambda
B. public delegate string convertMethod(string value);
Run Code Online (Sandbox Code Playgroud)
我不确定这两者之间究竟有什么区别.他们都是代表吗?我相信第一个会使用lambda,第二个必须有一个方法来实际执行工作.我也可能感到困惑.
我知道如何使用Action
和Func
在.NET中,但每次我开始,使用我调用的常规旧方法可以实现完全相同的解决方案.
这排除了当一个Action
或者Func
被用作我无法控制的东西的参数时,比如LINQ .Where
.
基本上我的问题是......为什么这些存在?他们给了我什么额外的和新的一个简单的方法不?
这似乎是一个愚蠢的问题,但这只是出于好奇心的缘故.
我们在C#中有两个特定的已经定义的委托:
Action封装了任何带有0个或更多参数的"void"方法.
Func封装了返回特定值类型并接受0个或更多参数的任何方法.
我的问题是:在哪些情况下建议定义自定义委托?
你为什么要这么做?
提前致谢
我一直试图解决这个问题很长一段时间(阅读在线博客和关键词),但到目前为止还没有成功.
代表们是什么?什么是Lambda表达式?两者的优点和缺点?何时使用其中一种可能的最佳做法?
提前致谢.
我一直试图在C#中找到代表,但我似乎没有明白使用它们.以下是来自代表MSDN页面的一些稍微重建的代码:
using System;
using System.Collections;
namespace Delegates
{
// Describes a book in the book list:
public struct Book
{
public string Title; // Title of the book.
public string Author; // Author of the book.
public decimal Price; // Price of the book.
public bool Paperback; // Is it paperback?
public Book(string title, string author, decimal price, bool paperBack)
{
Title = title;
Author = author;
Price = price;
Paperback = paperBack;
}
}
// Declare a …
Run Code Online (Sandbox Code Playgroud) 例如,哪一个在方法中的参数类型(与LINQ无关)中更好.显然Func更好,因为它更简单,更具描述性,如果每个人都在使用它,一切都将变得兼容(好).但是我注意到Microsoft在某些库中使用自己的委托,例如事件处理程序.那么,它们中的任何一个的优点和缺点是什么?我应该什么时候使用它?
编辑:
显然Func <>仅在3.5中可用,所以这可能是我看到非Func代表的主要原因.任何其他不使用Func的原因?(例如:这是来自.NET4)
同样的问题也适用于Action <>
我想写一个方法,它做了一些工作,最后返回另一个方法与原始方法相同的签名.这个想法是依次处理一个字节流,而不是进入递归.通过这样称呼它:
MyDelegate executeMethod = handleFirstByte //What form should be MyDelegate?
foreach (Byte myByte in Bytes)
{
executeMethod = executeMethod(myByte); //does stuff on byte and returns the method to handle the following byte
}
Run Code Online (Sandbox Code Playgroud)
要切换方法,我想将它们分配给Func委托.但我遇到的问题是,这导致递归声明而没有终止...
Func<byte, Func<byte, <Func<byte, etc... >>>
Run Code Online (Sandbox Code Playgroud)
我不知何故在这里迷路了.我怎么能绕过那个?
谷歌搜索后看起来并不乐观,但我想知道在使用Action<T>
或Func<in T, out TResult>
在C#中是否有某种混叠或类型定义的方法?
我已经在c#中看到了typedef的等价,它说在一个编译范围内你可以在using
某些情况下使用该构造,但就我所知,这似乎并不适用于Action
's和Func
s.
我想要这样做的原因是我想要一个动作用作多个函数的参数,如果我在某个时间点决定改变动作,那么很多地方都要改变它们作为参数类型和作为变量类型.
?typedef? MyAction Action<int, int>;
public static SomeFunc(WindowClass window, int number, MyAction callbackAction) {
...
SomeOtherFunc(callbackAction);
...
}
// In another file/class/...
private MyAction theCallback;
public static SomeOtherFunc(MyAction callbackAction) {
theCallback = callbackAction;
}
Run Code Online (Sandbox Code Playgroud)
是否有一些构造要使用,它可以定义MyAction
代码段中指示的?
说我有一个功能.我希望在变量中添加对此函数的引用.
所以我可以从变量'bar'调用函数'foo(bool foobar)',好像它是一个函数.例如.'巴(foobar的)'.
怎么样?