Delegate
Providers.Func(Func<Key, Value>) adapts a delegate into a provider.
IProvider<double, double> squareProvider = Providers.Func((double x) => x * x);
WriteLine(squareProvider[10]); // -> "100"
Providers.Func(TryCreate<Key, Value>) adapts TryCreate<Key, Value> delegate into a provider.
/// <summary>Try create pattern.</summary>
public delegate bool TryCreate<Key, Value>(Key key, out Value value);
IProvider<double, double> squareProvider = Providers.Func<double, double>(TrySquare);
WriteLine(squareProvider[10]); // -> "100"
public static bool TrySquare(double x, out double result) { result = x * x; return true; }
.ValueFunc(Func<Value, Value>) decorates a provider to apply a delegate on the value.
IProvider<double, double> provider = Providers.Func((double x) => x * x);
provider = provider.ValueFunc(x => x * 2.0);
WriteLine(provider[10]); // -> "200"
Full Example
Full example
using Avalanche.Utilities.Provider;
using static System.Console;
class provider_delegate
{
public static void Run()
{
{
// <01>
IProvider<double, double> squareProvider = Providers.Func((double x) => x * x);
WriteLine(squareProvider[10]); // -> "100"
// </01>
}
{
// <02>
IProvider<double, double> squareProvider = Providers.Func<double, double>(TrySquare);
WriteLine(squareProvider[10]); // -> "100"
// </02>
}
{
// <03>
IProvider<double, double> provider = Providers.Func((double x) => x * x);
provider = provider.ValueFunc(x => x * 2.0);
WriteLine(provider[10]); // -> "200"
// </03>
}
}
// <02B>
public static bool TrySquare(double x, out double result) { result = x * x; return true; }
// </02B>
}