我有浮点数组
public float[] Outputs;
在我的代码中的某处,某些情况正在更新数组值并导致NaN。这是一个非常少见的错误,我无法一生找出导致错误的原因。
如何以最小的代码更改进行更改以进行跟踪?最好将该数组设为私有并重命名,然后创建一个名为Outputs的属性以获取和设置,该属性在每次设置时都会进行一次NaN检查。然后,当设置了NaN并检索调用堆栈时,我可以轻松地引发一个异常,而不是在另一段代码尝试使用它时在下一行发现它。这样的东西-实际上可以编译。
我得到错误:
"Bad array declarator: To declare a managed array the rank specifier precedes
the variable's identifier. To declare a fixed size buffer field, use the fixed
keyword before the field type."
这是我的代码:
public float[] _outputs;
public float Outputs[int index]
{
get
{
return _outputs[index];
}
set
{
if (float.IsNaN(value))
throw new Exception("Blar blar");
_outputs[index] = value;
}
}
编辑:感谢您的回答,人们,寻找答案的其他任何人都可能想阅读以下内容:
Why C# doesn't implement indexed properties?
参考方案
您不能在C#中使用命名索引器,作为一种解决方法,您可以执行以下操作:
public class Indexer<T>
{
private T[] _values;
public Indexer(int capacity)
{
_values = new T[capacity];
}
protected virtual void OnValueChanging(T value)
{
// do nothing
}
public T this[int index]
{
get { return _values[index]; }
set
{
OnValueChanging(value);
_values[index] = value;
}
}
}
public class FloatIndexer : Indexer<float>
{
public FloatIndexer(int capacity)
: base(capacity)
{
}
protected override void OnValueChanging(float value)
{
if (float.IsNaN(value))
throw new Exception("Blar blar");
}
}
public class Container
{
public Container()
{
Outputs = new FloatIndexer(3);
}
public FloatIndexer Outputs { get; private set; }
}
...
var container = new Container();
container.Outputs[0] = 2.5f;
container.Outputs[1] = 0.4f;
container.Outputs[2] = float.NaN; // BOOM!
...
我将其更新为更通用,因此您可以将其重新用于其他各种类型,而不仅仅是float
。
可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制
LeetCode题解统计城市的所有灯泡这个是我刚毕业的时候,一个真实的面试题,这是一个开放题。题目描述:想办法,将一个城市的所有灯泡数量统计出来。题解:费米估算法1、如果某个城市常驻人口有1000万2、假设每5人居住在一套房里,每套房有灯泡5只,那么住宅灯泡共有1000万只3、假设公众场所每10人共享一只灯泡,那么共有100万只4、主要的这两者相加就得出了1100万只当然实际上这是估算的,具体应…
LeetCode题解黑白圆盘一个圆盘被涂上了黑白二色,两种颜色各占一个半圆。圆盘以一个未知的速度、按一个未知的方向旋转。你有一种特殊的相机可以让你即时观察到圆上的一个点的颜色。你需要多少个相机才能确定圆盘旋转的方向?题解:可以用一个相机即可
LeetCode题解圆上任取三点构成锐角三角形的概率来自字节跳动的一道几何题题解:1/4
LeetCode题解深度优先遍历和回溯的关系?深度优先遍历的范围更大还是回溯的范围更大?为什么?题解:我的理解是:dfs是回溯思想的一种体现- 回溯:是在整个搜索空间中搜索出可行解,在搜索过程中不断剪枝回退,这是回溯的思想,这个搜索空间并没有限制于特定的数据结构。- dfs:dfs是指特定的数据结构中如图,树(特殊的图)中搜索答案,范围限制在了特定的数据结构。个人拙见。