0

私は3つの機能を持っています:

public int ok_join(string gr)
{

        ...................
        string gash = Regex.Match(response, @"gash:""(?<id>[^""]+)""").Groups["id"].Value;
        string groupId = Regex.Match(response, @"state:""smd=(?<id>[^""]+)""").Groups["id"].Value;
       ......................
}

public bool ok_post(string gr)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.site.ru/" + gash + "&stoud=" + groupId + "&");
    .........................
 }

public void go()
{
    while (true)
    {
        ........

                int h = ok_join(gr);
                if (h == 0)
                    ok_post(gr);
        .............
     }
}

関数ok_joinからok_postにgashとgroupidの値を送信する方法は?

4

4 に答える 4

4

全力を尽くす:戻り値ok_joinを含む本格的なオブジェクトをint返し(何hを表すと考えられているか、それは合格/不合格だと思いますか?)、それgashgroupIdに渡しok_joinます:

public class JoinResults
{
    public int h { get; private set; }
    public string gash { get; private set; }
    public string groupId { get; private set; }

    public JoinResults(int h, string gash, string groupId)
    {
        this.h = h;
        this.gash = gash;
        this.groupId = groupId;
    }
}

次に、メソッド/使用法は次のようになります。

public JoinResults ok_join(string gr)
{
        string gash = Regex.Match(response, @"gash:""(?<id>[^""]+)""").Groups["id"].Value;
        string groupId = Regex.Match(response, @"state:""smd=(?<id>[^""]+)""").Groups["id"].Value;

        return new JoinResults(0, gash, groupId);
}

public bool ok_post(JoinResults joinResults, string gr)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.site.ru/" + joinResults.gash + "&stoud=" + joinResults.groupId + "&");
}

public void go()
{
    while (true)
    {
        JoinResults results = ok_join(gr);
        if (results.h == 0)
            ok_post(results, gr);
     }
}

grただし、メンバー名、大文字と小文字など、およびその変数が想定されているものに関して、可読性パスを取得することを強くお勧めします。

于 2012-12-03T20:17:06.483 に答える
2

パラメータを使用できます

public int ok_join(string gr, out string gash, out string groupId) 
{
        ...................
        gash = Regex.Match(response, @"gash:""(?<id>[^""]+)""").Groups["id"].Value;
        groupId = Regex.Match(response, @"state:""smd=(?<id>[^""]+)""").Groups["id"].Value;
       ......................  
}

public bool ok_post(string gr, string gash, string groupId) 
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.site.ru/" + gash + "&stoud=" + groupId + "&");
    .........................  
}

public void go() 
{
    while (true)
    {
        ........
                string gash;
                string groupId

                int h = ok_join(gr, out gash, out groupId);
                if (h == 0)
                    ok_post(gr, gash, groupId);
        .............
     } 
}
于 2012-12-03T20:07:28.683 に答える
0

ここには2つの実際のパスがあります。

  1. これらの2つの変数は、両方のメソッドを含むオブジェクトの「状態」を表します。オブジェクトが何であるか、正確にこれらの変数が使用される可能性が高い場所、廃止されたときなどがわからないため、これが当てはまるかどうかを判断するのはかなり困難です。これらの変数がほとんど存在するはずの場合、すべてではないにしても、それらが存在するオブジェクトの存続期間のうち、それらはそのオブジェクトの「状態」の一部である可能性が最も高いです。これが当てはまる場合は、これらのメソッドの両方を含むクラスに対して2つのプライベートインスタンス変数を作成し、両方をに設定してok_joinから、で読み取る必要がありok_postます。
  2. 2つの変数は、そのオブジェクトの状態の一部を表していません。ある関数の結果を、その直後に呼び出される別の関数で使用したいだけです。データは、これら2つの関数呼び出しを超えて保持されるべきではありません。この場合、最初の関数からこれら2つの値を返し、それらを次の関数に渡します。

オプション#2の場合、実際に実装する方法はいくつかあります。return遭遇する大きな障害は、C#(およびほとんどのプログラミング言語)のメソッドは、複数ではなく1つの値しか使用できないことです。これを回避する1つの方法は、juharrによる質問に対するこのout別の回答で示されているように、パラメーターを使用することです。もう1つのオプションは、独自のカスタムタイプを作成し、関数が返す必要のあるすべてのものをそのタイプに入れてから、そのタイプを2番目の関数に渡すことです。これは次のように実装できます。

public class JoinResults
{
    public int H { get; set; }
    public string Gash { get; set; }
    public string GroupId { get; set; }
}

次に、メソッドを次のように調整できます。

public JoinResults ok_join(string gr)
{
    string gash = "";
    string groupID = "";
    //...
    return new JoinResults()
    {
        H = 0,
        Gash = gash,
        GroupId = groupID,
    };
}

public bool ok_post(string gr, JoinResults joinResults)
{
    string url = "http://www.site.ru/" + joinResults.Gash + "&stoud="
        + joinResults.GroupId + "&";
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    //.........................
    return true;
}

すると、呼び出し元のコードは次のようになります。

JoinResults results = ok_join(gr);
if (results.H == 0)
    ok_post(gr, results);
于 2012-12-03T20:24:23.293 に答える
-2

なぜデルケアgashgroupidグロブル変数としてではないのですか?

于 2012-12-03T20:05:36.957 に答える