2012-06-05 35 views
5

Bir nesne döndüren ve ayrıca bir çıkış parametresi olan bir yöntem var. Yöntem, aynı çıkış parametresini başka bir çıkış parametresi olarak alan başka bir yöntemi çağırır.İşlevde parametre nasıl atanır?

public TypeA Method1(TypeA param1, out bool param2) 
{ 
    /... some logic here .../ 
    SubMethod(out param2); 
    /... some logic here .../ 
    return param1; 
} 
:

üzerinden parametre 'Param1' kontrol yaprakları geçerli yöntem kod benziyor

önce atanmalıdır: Bu dönüş ekstresinde bir yapı hata veriyor

param2, Method1() yönteminde değil SubMethod() yönteminde işlenir. Yapmam gereken başka bir şey var mı?

+5

Bu kod hata mesajıyla aynı fikirde değil. * Param1 ile * * * kodunu izole etmeye çalışın (bence 'param2' burada kırmızı bir ringa balığıdır). –

+0

Evet, ben de öyle düşünüyorum. –

+2

TypeA ve TypeB arasındaki ilişki nedir? –

cevap

3

Bu durumda, bir 'varsayılan' değerini atar. Boole, int, myFoo, vb. Bağımsız olarak - varsayılan bir değer belirleyin.

public TypeA Method1(TypeB param1, out bool param2) 
{ 
    param2 = false; // default value; 
    // or 
    param2 = default(bool); // in cases where you are not sure what the default is 

    /... some logic here .../ 
    SubMethod(out param2); 
    /... some logic here .../ 
    return param1; // UPDATE: <- this is where you are receiving the exception 
} 

Ama istisna 'param1' atıfta neden Param1 bu örnekte hatalı açıkça değilken tanımlamak gerekir (açıklama için : TypeB : TypeA varsayarak ve düzgün kısıtlanır).

ben SubMethod(...) bir out parametre olarak param2 geçen param2 atamak yükümlülüğünü kaldırır inanıyoruz. Ancak, param1'a hiçbir şey atamadınız. Burada daha açıklanmayan bir şey var mı?

+1

Sanırım kafasına çivilenmişsin. Sorun, TypeA gerektirdiğinde bir TypeB döndürüyor olmasıdır. –

+1

Sanırım sadece başlangıçta atadığım şey, bıraktığım şey. Alınmayan SubMethod() için kod yolları yaratabilecek başka şeyler (koşullu) var. – 4thSpace

+1

Sorgulamada söylediğim gibi, 'Param2 = false;' metod1'in bu değere ayarlanmış param2 ile dönebileceğini kabul etmedikçe, 'param2 = false' atamaya dikkat edin. 'SubMethod' asla vurulmadıysa 'false' kabul edilebilir bir değer olarak mantıklı mıdır?Derleyici, her kod yolunun 'SubMethod (out param2)' çağrısından geçtiğini görebiliyorsa, ilk önce param2'yi anlamsız bir değere ayarlamak gerekli olmayacaktır. ('ParaM2', SubMethod’un geri döndürülmesinden sonra kesin olarak atanır.) –

1

Method1'un en başında false olarak ayarlayabilirsiniz.

+1

Biraz açıklama nasıl? –

0

ben dönüş tipine SubMethod dışarı parametreyi hareket önerebilir:

public TypeA Method1(TypeB param1, out bool param2) 
{ 
    /... some logic here .../ 
    param2 = SubMethod(param2); 
    /... some logic here .../ 
    return param1; 
} 
İlgili konular