是否可以声明不带参数的通用委托?

发布于 2024-12-20 06:04:47 字数 240 浏览 0 评论 0原文

我有......

Func<string> del2 = new Func<string>(MyMethod);

而且我真的很想做......

Func<> del2 = new Func<>(MyMethod);

所以回调方法的返回类型是void。使用泛型类型 func 可以吗?

I have...

Func<string> del2 = new Func<string>(MyMethod);

and I really want to do..

Func<> del2 = new Func<>(MyMethod);

so the return type of the callback method is void. Is this possible using the generic type func?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

旧时浪漫 2024-12-27 06:04:47

Func 系列委托适用于采用零个或多个参数并返回值的方法。对于采用零个或多个参数且不返回值的方法,请使用 Action 委托之一。如果该方法没有参数,请使用非通用版本的操作

Action del = MyMethod;

The Func family of delegates is for methods that take zero or more parameters and return a value. For methods that take zero or more parameters an don't return a value use one of the Action delegates. If the method has no parameters, use the non-generic version of Action:

Action del = MyMethod;
夜深人未静 2024-12-27 06:04:47

是的,返回 void(无值)的函数是一个 Action

public Test()
{
    // first approach
    Action firstApproach = delegate
    {
        // do your stuff
    };
    firstApproach();

    //second approach 
    Action secondApproach = MyMethod;
    secondApproach();
}

void MyMethod()
{
    // do your stuff
}

希望这有帮助

Yes a function returning void (no value) is a Action

public Test()
{
    // first approach
    Action firstApproach = delegate
    {
        // do your stuff
    };
    firstApproach();

    //second approach 
    Action secondApproach = MyMethod;
    secondApproach();
}

void MyMethod()
{
    // do your stuff
}

hope this helps

紅太極 2024-12-27 06:04:47

如果您“被迫”使用 Func,例如在您想要重用的内部通用 API 中,您可以将其定义为 new Func( () => { SomeStuff(); 返回 null;

In cases where you're 'forced' to use Func<T>, e.g. in an internal generic API which you want to reuse, you can just define it as new Func<object>(() => { SomeStuff(); return null; });.

夕嗳→ 2024-12-27 06:04:47

以下是使用 Lambda 表达式而不是 Action/Func 委托的代码示例。

delegate void TestDelegate();

static void Main(string[] args)
{
  TestDelegate testDelegate = () => { /*your code*/; };

  testDelegate();
}

Here is a code example using Lambda expressions instead of Action/Func delegates.

delegate void TestDelegate();

static void Main(string[] args)
{
  TestDelegate testDelegate = () => { /*your code*/; };

  testDelegate();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文