2012-12-03 23 views
0

我有3個功能:如何將var的值從1個func轉移到另一個?

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發送的傷口和GROUPID的價值ok_post

+0

我不是確定你的意思。 –

+0

你需要在ok_post中使用gash嗎?但是,如果沒有把它當作諷刺,對吧? – rendon

+0

我需要粘貼一個gash和groupId(在ok_join中解析)的值來獲取ok_post中的請求 – user1872295

回答

-2

爲什麼不delcare gashgroupid爲全地球的變量?

+0

由於數據成員會更好。 – rendon

+0

我不知道= \ – user1872295

+0

對,但是在他的'ok_post'函數中,他試圖直接使用'gash'和'groupid' ..所以我們也可以在'go'函數中聲明它,並使用'out '關鍵字。 – bhuang3

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); 
     ............. 
    } 
} 
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變量應該是。

0

這裏有兩個現實的路徑:

  1. 這兩個變量代表「國家」既包含方法的對象。我們很難知道這是否適合您,因爲我們不知道對象是什麼,這些變量很可能被使用,變得過時等等。如果這些變量大多存在,如果不是全部,那麼它們最有可能是該對象的「狀態」的一部分。如果這對你是真的,那麼你應該爲包含這兩種方法的類創建兩個私有實例變量,將它們都設置在ok_join中,然後在ok_post中讀取它們。
  2. 這兩個變量不是表示該對象狀態的一部分;你只是想在其後立即調用的另一個函數中使用某個函數的結果;數據不應該超出這兩個函數調用。在這種情況下,您希望從第一個函數返回這兩個值,並將它們傳遞給下一個函數。

對於選項#2,實際上有幾種實際實現它的方法。你遇到的一大障礙是C#(和大多數編程語言)中的方法只能得到一個值,而不是幾個。解決這個問題的一個方法就是使用out參數,這是由juharr提供的其他問題的答案,如this。另一種選擇是創建自己的自定義類型,將該函數需要返回的所有內容都放入該類型中,然後將該類型傳遞給第二個函數。這可以實現,像這樣:

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); 
相關問題