我有这样的代码:
public float? InputCutOffFrequency { get; set; }//fc
public float? InputF1 { get; set; }
public float? InputF2 { get; set; }
public float InputTransitionBand { get; set; }
public float InputFS { get; set; }
public float calcFc1(float f, float fs, float transition)
{
float _f = f + (transition / 2);
_f /= fs;
return _f;
}
float fc1;
fc1 = calcFc1(InputCutOffFrequency, InputFS, InputTransitionBand);在运行此代码时,我会得到以下错误:
cannot convert from 'float?' to 'float如何纠正此错误?
发布于 2022-05-24 23:39:20
它是一个可空的浮点数,因此您需要指定您想要的值。
fc1 = calcFc1(InputCutOffFrequency.Value, InputFS, InputTransitionBand);或者,如果它是空的,也可以默认
fc1 = calcFc1(InputCutOffFrequency.GetValueOrDefault(0), InputFS, InputTransitionBand);发布于 2022-05-24 23:47:23
在C#中,当在类型后面使用时,?表示与类型关联的变量可以是null或具体值。您编写的函数calcFcl具有一个签名,该签名接受三个浮点数,并生成一个浮点数作为输出。但是,当您调用它时,您将为它提供一个float?作为第一个参数。由于带有空值的浮点操作无效,因此编译器不知道在这种情况下该做什么。
有三种方法可以解决这个问题:
InputCutOffFrequency,使其为float类型而不是float?类型。calcFc1的方式,以便发送InputCutOffFrequency值而不是可空值:// 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);calcFcl的签名,以便它接受第一个参数的float?值,然后修改函数体,以便它处理第一个参数为null的情况。public float calcFc1(float? f, float fs, float transition)
{
float _f = (f ?? 0) + (transition / 2);
_f /= fs;
return _f;
}在本例中,f ?? 0将f合并为一个值。本质上,如果f为null,则将使用0。如果f不是null,那么将使用f中的值。
有关C#中可空类型的更多信息,请随意查看文档。
发布于 2022-05-25 00:04:19
1:
fc1 = calcFc1(InputCutOffFrequency.Value, InputFS, InputTransitionBand);或2:
public float calcFc1(float f?, float fs, float transition)
{
float _f = f + (transition / 2);
_f /= fs;
return _f;
}您可以在函数中将可空变量的签名更改为float?。2
另一种方法是获取可空变量的Value,如InputCutOffFrequency.Value 1。
https://stackoverflow.com/questions/72370510
复制相似问题