2016-03-28 11 views
1

は私は私はこのようなメソッドを作成し方法は同じ型のオブジェクトを返すとき、パラメータオブジェクトも

public Node(HashSet<string> _id, double _weight, List<string> _diff, int _depth, HashSet<string> _prefix, int _support) 
{ 
    Id = _id; 
    Weight = _weight; 
    Diffset = _diff; 
    Depth = _depth; 
    Prefix = _prefix; 
    Support = _support; 
    Isleaf = false; 
    Weightsup = _support*_weight; 
} 

オブジェクトのノードを作成し

この問題で私を助け、3つのパラメータを渡してください変更され

public Node CreateTailNode(Node _a, Node _b, Double _minsup) 
{ 
    Node _child = new Node(); 
    _child.Prefix = _a.Id; 
    _child.Id = _a.Id.AddRange(_b.Id); 
    _child.Depth = _a.Depth + 1; 
    _child.Diffset = _a.Diffset.Except(_b.Diffset).ToList(); 
    _child.Weight = (_a.Weight + _b.Weight)/2; 
    _child.Support = _a.Support - _child.Diffset.Count; 
    _child.Weightsup = _child.Support*_child.Weight; 
    if (_child.Weightsup < _minsup) 
    { 
     _child.Isleaf = true; 
    } 
    else 
    { 
     _child.Isleaf = false; 
    } 
    return _child; 
} 

戻り_child後、私はノード_a.Prefixも変更と同じ_child.Prefix

に来ていることを実感

ノード_aのプレフィックスを変更せずに_childを作成する方法

+0

_aおよび_bは参照型です。このメソッドを呼び出した後、これらのオブジェクトの変更が存在します。 「_a.Id.AddRange(_b.Id)」ステートメントを確認します。 –

答えて

0

HashSetは値セマンティクスのない参照型であるため、参照をコピーしても内容の新しいコピーは作成されません。参照コピーは元のオブジェクトを参照して終了します。

解決方法は、割り当てようとする前にHashSetのコピーを作成することです。

_child.Prefix = new HashSet<string>(_a.Id); 

は、私はあなたが_child.Idである意図しているのかわからないんだけど、私はあなたがそれに似た何かをする必要があります期待:

_child.Id = new HashSet<string>(_a.Id); 
_child.Id.AddRange(_b.Id); 

同じロジックを適用しなければなりません使用している可能性のある他の参照型に変換します。別のコピーが必要な場合は、明示的にコピーを作成する必要があります。

+0

「child.Id = _a.Id.AddRange(_b.Id);」に問題が見つかりました。 –

+0

個別のコピーを作成して明示的に作成する方法を教えてください。わかりません。 –

+0

@TùngKiềuVũThanh '_child.Prefix = new HashSet (' _a.Id); 'という行は別のコピーを作成します。 –

0

if()条件の2つのHashSetを比較する必要があります。if(_F1.Prefix == _F2.Prefix) {Do sth. here}結果は常にfalseです。

+0

これについて新しい質問をする必要があります。 –

+0

私は限界に達します。私は6日後に尋ねることができます。しかし、私はそれを解決しました。 –

関連する問題