Files
quantconnect--lean/Common/Benchmarks/FuncBenchmark.cs
Michael Handschuh 3e93158713 Use proper exception types
The `NullReferenceException` type is intended to only be thrown by the CLR.
In most cases, it should be converted to an `ArgumentException` or an
`InvalidOperationException`, depending on if the null value is a parameter
to the current method or not.

The `Exception` type should never really be thrown as it doesn't provide any
additional information or hints as to the issue. It also forces users that
would like to handle expected exceptions to catch all exceptions. These are
converted to an exception type that more accurately describes the reason for
raising the exception: `KeyNotFoundException`, `InvalidOperationException`
2019-08-16 18:07:30 -03:00

50 lines
1.7 KiB
C#

/*
* QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals.
* Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
namespace QuantConnect.Benchmarks
{
/// <summary>
/// Creates a benchmark defined by a function
/// </summary>
public class FuncBenchmark : IBenchmark
{
private readonly Func<DateTime, decimal> _benchmark;
/// <summary>
/// Initializes a new instance of the <see cref="FuncBenchmark"/> class
/// </summary>
/// <param name="benchmark">The functional benchmark implementation</param>
public FuncBenchmark(Func<DateTime, decimal> benchmark)
{
if (benchmark == null)
{
throw new ArgumentNullException(nameof(benchmark));
}
_benchmark = benchmark;
}
/// <summary>
/// Evaluates this benchmark at the specified time
/// </summary>
/// <param name="time">The time to evaluate the benchmark at</param>
/// <returns>The value of the benchmark at the specified time</returns>
public decimal Evaluate(DateTime time)
{
return _benchmark(time);
}
}
}