接受不带参数的函数的 C# 泛型委托

C# generic delegate that accept function without arguments

我创建了一个通用委托,我想为其分配一个不带任何参数的函数。 可能吗?

这是我到目前为止尝试过的方法:

class Program
    {
        public delegate void TemplateDel<T>(T item);

        public static void fWriteLetters(char[] p_cLetters)
        {
            for (int i = 0; i < p_cLetters.Length; i++)
                Console.WriteLine(p_cLetters[i]);
        }
        void fNoArg()
        {
            Console.WriteLine("No arguments!");
        }
        static void Main(string[] args)
        {
            TemplateDel<char[]> l_dWriteLeters  = new TemplateDel<char[]>(fWriteLetters);
            TemplateDel<void> l_dNoArg              = new TemplateDel<void>(fWriteLetters);


        }
    }

最后一行代码无法编译...

不,这是不可能的。void 仅在 return 中有效 types.You 不能将其用作其他上下文中的类型。 (unsafe 上下文除外)

您需要为您的委托添加另一个重载。

public delegate void TemplateDel();

或者简单地使用 Action.

作为Selman22 notes in the other :

No it is not possible.

但还有另一种方法,使用 lambda 来丢弃参数:

TemplateDel<bool> l_dNoArg = new TemplateDel<bool>(_ => fWriteLetters);

(这里使用 _ 作为标识符匹配 F# 的通配符——忽略这个参数——语法。)

虽然在这里没有帮助,但这种包装器在传递不感兴趣的参数时很有用,并且可以节省编写额外的成员来忽略或重新排列参数。