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

时间:2015-02-02 11:49:36

标签: c# generics

我已经创建了一个通用委托,我想为它分配一个没有任何参数的函数。 有可能吗?

这是我到目前为止所尝试的内容:

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);


        }
    }

最后一行代码没有编译......

2 个答案:

答案 0 :(得分:5)

不可能。void仅在返回类型中有效。您不能将其用作其他上下文中的类型。 (unsafe上下文除外)

您需要为代理添加另一个重载。

public delegate void TemplateDel();

或者只使用Action

答案 1 :(得分:1)

另外Selman22注明了answer

  

不,这是不可能的。

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

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

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

虽然这里没有帮助,但是当参数不感兴趣时​​,这种包装是有用的,并且保存写一个额外的成员只是为了忽略或重新安排参数。