C#   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了你能写一个可以接受任意数量参数的c#装饰器函数吗?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前的代码python装饰器非常相似,它将函数作为参数并返回由另一个函数包装的相同函数(在这种情况下打开和关闭perforce连接).

public Func<TArg,TReturn> EnableP4<TReturn,TArgs>(Func<TArg,TReturn> function)
    {
        Func<TArg,TReturn> p4Wrapper = (TArg funcArg) =>
        {
            try
            {
                if (con.Status.Equals(ConnectionStatus.Disconnected)) { con.Connect(options); }
                return function(funcArg);
            }
            finally { con.Disconnect(); }
        };
        return p4Wrapper;
    }

目前这仅适用于具有一个参数的函数,我想知道它是否可以更通用(可能是否有一种方法将数组解压缩到方法中?).

(有什么东西沿着这个?)

public Func<TArgs,TArgs>(Func<TArgs,TReturn> function)
    {
        Func<TArgs,TReturn> p4Wrapper = (TArgs args) =>
        {
            try
            {
                if (con.Status.Equals(ConnectionStatus.Disconnected)) { con.Connect(options); }
                return function(*args);
            }
            finally { con.Disconnect(); }
        };
        return p4Wrapper;
    }

其中TArgs是TArg [].

解决方法

你可以使用Func< T> (不是Func< TArg,TResult>),并允许编译器通过lambda表达式中的闭包处理多个参数.

如果您将方法更改为:

public Func<T> EnableP4<T>(Func<T> function)

您可以随时通过以下方式调用

var newFunc = EnableP4(() => SomeFunc(arg1,arg2,arg3));

这很好,因为它允许任意数量的参数而不会有多个重载.

大佬总结

以上是大佬教程为你收集整理的你能写一个可以接受任意数量参数的c#装饰器函数吗?全部内容,希望文章能够帮你解决你能写一个可以接受任意数量参数的c#装饰器函数吗?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。