2016-08-17 16 views
-3

への参照 'ref'のようなvarの参照を使用する方法がありますが、メソッドでは使用できないのだろうかと思います。 exemple: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) 
      } 
     } 
    } 
} 

私は、配列に値を入れてみましたが、私はそれは悪い方法だと思います。私は他のものをたくさん試しましたが、何も正しく動作しません。だから今、あなたがこれを行うことができます

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

+6

質問のポイントがありません。 'myStruct()'のコンストラクタは 'ref'パラメータを取らず、' ref'パラメータ(それに代入する)を必要とする何もしません。なぜそれを 'ref'として渡したいのですか? –

+1

技術的な問題ではなく、あなたの問題について詳しく説明できますか?多分もっと良い方法がありますか? – rsqLVo

+0

これはあなたが望むものですか? 'int value1 = 2; var s =新しいmyStruct(mybool、ref value1); s.structInt = 3; Console.WriteLine(value1);/* outputs 3 */' - つまり、Cがintへのポインタと呼ばれるものを探していますか? –

答えて

0

あなたがそうのように参照することにより、これらのパラメータを渡すためにコンストラクタを変更することができます。問題は

currentTask.structInt++;

この行を呼び出すことはまだ変更されないだろうということです

public myStruct(bool _structBool, ref int _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(); args2 =新しいArgs(); 'と' public int structInt; '' public Args structArgs'(コンストラクタも同様に変更します)のようにしてください。 'currentTask.structArgs.Value ++;' – suwik

+0

ありがとう、それは仕事です! – bobHihi

0

は通常、あなたが(あるいはメソッド)コンストラクタに複数の値を与えたいとき、それはあなたがクラスの一部としてそれらを与えることが非常に許容可能だ

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に対する修正は構造体コンストラクタ発信者のために利用可能であろう。