接受不带参数的函数的 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# 的通配符——忽略这个参数——语法。)
虽然在这里没有帮助,但这种包装器在传递不感兴趣的参数时很有用,并且可以节省编写额外的成员来忽略或重新排列参数。
我创建了一个通用委托,我想为其分配一个不带任何参数的函数。 可能吗?
这是我到目前为止尝试过的方法:
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# 的通配符——忽略这个参数——语法。)
虽然在这里没有帮助,但这种包装器在传递不感兴趣的参数时很有用,并且可以节省编写额外的成员来忽略或重新排列参数。