相关疑难解决方法(0)

泛型谓词的默认值作为参数

第一次问我:)

我需要一些方法来定义使用格式的泛型的默认谓词

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'的默认参数值必须是编译时常量

有没有一种顺利的方法可以做到这一点,我缺少或应该使谓词函数可以为空并相应地改变我的函数逻辑?

谢谢,

c# arguments predicate default-value

21
推荐指数
1
解决办法
9584
查看次数

操作作为函数中的可选参数

是否可以将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# action optional-parameters

13
推荐指数
1
解决办法
8351
查看次数

也许是类和可选参数

我在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)

c# optional-parameters compile-time-constant maybe

2
推荐指数
1
解决办法
7416
查看次数

委托的默认参数值

我需要调用作为参数传递的委托方法,但由于此参数是可选的,我想将默认值设置为在"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 …

c# delegates

1
推荐指数
1
解决办法
1341
查看次数