In C#, the ?, when used after a type, indicates that the variable associated with the type can be null or a concrete value. The function you wrote, calcFcl, has a signature that takes three floats and produces a float as output. However, when you call it, you're providing it with a float? as the first argument. Since floating-point operations with null values aren't valid, the compiler doesn't know what to do when this is the case.
There are three ways you can address this issue:
- Change
InputCutOffFrequencyso that it is of typefloatinstead of typefloat?. - Change how you call
calcFc1so that you send the value ofInputCutOffFrequencyinstead of the nullable value:
// Force a value (this will throw an InvalidOperationException if `InputCutOffFrequency is null) fc1 = calcFc1(InputCutOffFrequency.Value, InputFS, InputTransitionBand); // Coalesce the value (this will force a value, but you need to be sure it's the one you want) fcl = calcFcl(InputCutOffFrequency ?? 0, InputFS, InputTransitionBand); - Change the signature of
calcFclso that it accepts, for its first argument, a value offloat?and then modify the function body so that it handles the case where the first argument is null.
public float calcFc1(float? f, float fs, float transition) { float _f = (f ?? 0) + (transition / 2); _f /= fs; return _f; } In this case, the f ?? 0 is coalescing f to a value. Essentially, if f is null, then 0 will be used. If f is not null, then the value in f will be used.
For more information on nullable types in C#, feel free to check out the documentation.