第一次问我:)
我需要一些方法来定义使用格式的泛型的默认谓词
Func<T, bool>
Run Code Online (Sandbox Code Playgroud)
然后将其用作默认参数.像这样的东西:
public bool Broadcast(byte command, MemoryStream data, bool async, Func<T, bool> predicate = (T t) => true)
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我得到编译错误:
'predicate'的默认参数值必须是编译时常量
有没有一种顺利的方法可以做到这一点,我缺少或应该使谓词函数可以为空并相应地改变我的函数逻辑?
谢谢,
是否可以将Action作为函数中的可选参数?button2Action应该是可选的.
public void DrawWindow(Rect p_PositionAndSize, string p_Button2Text = "NotInUse", Action p_Button2Action)
{
// Stuff happens here
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用eg,p_Button2Action = delegate{ Debug.Log("NotInUse"); }但由于p_Button2Action的默认参数值必须是编译时常量,因此无法编译.如何创建一个编译时常量的可选Action?
我在c#中实现了一个Maybe/Option类.基本实现是
public delegate Maybe<TOutput> Converter<in TInput, out TOutput>(TInput input);
public delegate TOutput ElseDelegate<out TOutput>();
public delegate Maybe<TOutput> ElseDelegate2<out TOutput>();
public interface Maybe<out TResult> : IEnumerable<TResult>
{
Maybe<B> Bind<B>(Converter<TResult, B> f);
TResult Value();
bool IsSome();
}
public static class Maybe
{
public static Maybe<T> None<T>()
{
return new None<T>();
}
}
public interface INone<out TResult> : Maybe<TResult>
{
}
public interface ISome<out TResult> : Maybe<TResult>
{
}
public struct None<TResult> : INone<TResult>
{
public IEnumerator<TResult> GetEnumerator()
{ yield break; }
IEnumerator …Run Code Online (Sandbox Code Playgroud) 我需要调用作为参数传递的委托方法,但由于此参数是可选的,我想将默认值设置为在"destination"类中实现的方法.
这是一个几乎按预期工作的例子:
public class AgeCalculator
{
public void SetAge(Client client, Func<int, int> getAge = default(Func<int, int>))
{
client.Age = getAge != default(Func<int, int>) ? getAge(client.Id) : this.getAge(client.Id);
}
private int getAge(int clientId) {
return 10;
}
}
Run Code Online (Sandbox Code Playgroud)
然后..
class Program
{
static void Main(string[] args)
{
AgeCalculator calculator = new AgeCalculator();
Client cli1 = new Client(1, "theOne");
calculator.SetAge(cli1);//Sets 10
calculator.SetAge(cli1, getAge);//Sets 5
}
private static int getAge(int clientId) {
return 5;
}
}
Run Code Online (Sandbox Code Playgroud)
现在的问题 ; 必须设置的默认值是什么,以避免询问委托值?
尝试"public void SetAge(客户端客户端,Func …