2016-08-17 126 views
-3

我不知道是否有一種方法來使用類似'ref'的var引用,但不是在方法中。 爲例:參考var c#

using System; 
using System.Collections; 
using System.Collections.Generic; 

public class Class3 
{ 
    struct myStruct 
    { 
     public bool structBool; 
     public int structInt; 
     public myStruct(bool _structBool, int _structInt) 
     { 
      structBool = _structBool; 
      structInt = _structInt; 
     } 
    } 
    myStruct currentTask; 
    int value1,value2; 
    bool mybool, isProcessing; 
    Queue<myStruct> myTask = new Queue<myStruct>(); 

    void main() 
    { 
    //these two lines don't work due to the "ref" but I'm looking for something work like this 
     if (value1 > value2) myTask.Enqueue(new myStruct(mybool,ref value1)); 
     if (value2 > value1) myTask.Enqueue(new myStruct(mybool,ref value2)); 
     MyFunction(); 
    } 

    void MyFunction() 
    { 
     if (myTask.Count > 0) 
     { 
      if (!isProcessing) 
      { 
       currentTask = myTask.Dequeue(); 
       isProcessing = true; 
      } 
      else 
      { 
       currentTask.structInt++; // here I need to catch my var (value1 or value2) 
      } 
     } 
    } 
} 

我試圖把值到一個數組,但我認爲這是一個不錯的方法。我嘗試了很多其他的東西,但沒有正常工作。

+6

我錯過了您的問題的要點。 'myStruct()'的構造函數不需要'ref'參數,也不需要做任何需要使其成爲'ref'參數的東西(比如賦值給它)。你爲什麼想把它作爲'ref'來傳遞? –

+1

您能否詳細說明您的問題而不是技術上的困難?也許有更好的方法? – rsqLVo

+0

這是你想要的嗎? 'int value1 = 2; var s = new myStruct(mybool,ref value1); s.structInt = 3; Console.WriteLine(值1);/*輸出3 * /' - 也就是說,你在尋找C會調用一個指向int的指針嗎? –

回答

0

您可以更改構造函數按引用傳遞這些參數,像這樣:

public myStruct(bool _structBool, ref int _structInt)

的問題是,調用此行

currentTask.structInt++;

仍然不會改變原始變量(value1,value2)。請在此處查看答案中的解決方案:https://stackoverflow.com/a/13120988/775018

+0

我檢查但不明白這個線程如何解決我的問題。 – bobHihi

+0

嗨。建議的解決方案與@matías-fidemraizer建議的解決方案相同。這個想法是將一個整數包裝到另一個類中,以使'myStruct'和'MyFunction'都可以引用同一個實例。所以,如果你看Matias的代碼:你可以改變'int value1,value2;'到 'Args args1 = new Args(); args args2 = new Args();' 和'public int structInt;'給public Args structArgs'(改變構造函數),然後像這樣增加它:'currentTask.structArgs.Value ++;' – suwik

+0

謝謝,這是行之有效的! – bobHihi

0

通常當你想給多個值,從而構造(或者甚至是方法),這是非常可以接受的,你給他們作爲一個階級的一部分:

public class Args 
{ 
    public int Value { get; set; } 
} 

所以現在你可以這樣做:

Args args1 = new Args { Value = 10 }; 
Args args2 = new Args { Value = 34 }; 

// Obviously, your structs or classes should accept Args class as input parameter 
var struct1 = new MyStruct(true, args1); 
var struct2 = new MyStruct(false, args2); 

現在修改爲Args.Value1和/或Args.Value2將可用於結構構造函數調用方。