我将课程Cluster.cs
定义为:
public class Cluster
{
protected int _clusterID = -1;
private static int _clusterCount = 0;
protected int _attributeCount;
// _clusterObjects contains EvoObjects in this cluster.
protected List<EvoObject> _clusterObjects = new List<EvoObject>();
/** _nkA[_i] is the total occurrences of the attribute _i in this cluster*/
protected Int32[] _nkA;
// For each attribute, record their values as KeyValuePair.
protected Dictionary<Int32, UtilCS.KeyCountMap<Int32>> _attributeValues = new Dictionary<Int32, UtilCS.KeyCountMap<Int32>>();
public Cluster(int _clusterID, int _attributeCount)
{
this._clusterID = _clusterID;
this._attributeCount = _attributeCount;
_nkA = new Int32[_attributeCount];
}
// Initialize _attributeValues
IEnumerable<Int32> _range = Enumerable.Range(0, _attributeCount).GetEnumerator(_i => {_attributeValues[_i] = new UtilCS.KeyCountMap<Int32>()});
}
在初始化_attributeValues
时,出现错误:
&#34; GetEnumerator没有重载方法需要1个参数&#34;
而我只有一个参数来初始化,即_attributeValues
,这实际上是一个字典,为什么必须枚举它。
此外,如果我声明_attributeCount
静态,我无法在构造函数中使用它,如果我声明它是非静态的,我无法使用它Range
方法Enumberable。
我如何初始化_attributeValues
呢?
如何声明_attributeCount
静态或非静态?
答案 0 :(得分:0)
Enumerable.Range(0, _attributeCount).ToList().ForEach(x => _attributeValues.Add(x, new UtilCS.KeyCountMap<Int32>()));
答案 1 :(得分:0)
看起来你试图通过使用在创建对象时设置的变量(_range)来初始化Dictionary。这应该移动到构造函数中。您似乎正在尝试使用键0,1,2和新UtilCS.KeyCountMap()的值创建三个新属性。
如果这是正确的,那么我建议使用它作为你的构造函数。
public Cluster(int _clusterID, int _attributeCount)
{
this._clusterID = _clusterID;
this._attributeCount = _attributeCount;
_nkA = new Int32[_attributeCount];
for (var i = 0; i < 3; i++)
{
_attributeValues.Add(i, new UtilCS.KeyCountMap<int>());
}
}
但是,由于您要发送_attributeCount,我会说您可以使用它而不是3。
public Cluster(int _clusterID, int _attributeCount)
{
this._clusterID = _clusterID;
this._attributeCount = _attributeCount;
_nkA = new Int32[_attributeCount];
for (var i = 0; i < _attributeCount; i++)
{
_attributeValues.Add(i, new UtilCS.KeyCountMap<int>());
}
}