在c#中返回2个变量

时间:2015-10-18 17:17:08

标签: c#

我要在一个方法中更改两个变量但是我应该如何返回两个?没有数组。我想Tuple<>应该有所帮助,但我不知道如何采用变量。这段代码应该带有特殊的子串。

public static List<string> SomethingInsideTheOther(List<int> listOfPositionsOfQuotationMarks1, List<int> listOfPositionsOfQuotationMarks2, List<string> listOfBoxes, string text)
{
    int beggining = Math.Min(listOfPositionsOfQuotationMarks1[0], listOfPositionsOfQuotationMarks2[0]);
    if (beggining != 0)
    {
        listOfBoxes.Add(text.Substring(0, beggining));
    }
    int i = 0;
    int g = 0;
    for ( ; i < listOfPositionsOfQuotationMarks1.Count - 1;)
    {                
        for ( ; g < listOfPositionsOfQuotationMarks2.Count - 1;)
        {
            if (listOfPositionsOfQuotationMarks1[i] < listOfPositionsOfQuotationMarks2[g])
            {                        
                 listOfBoxes.Add(text.Substring(listOfPositionsOfQuotationMarks1[i], listOfPositionsOfQuotationMarks1[i + 1] - listOfPositionsOfQuotationMarks1[i] + 1));
                 WhenILssG(i, g, listOfPositionsOfQuotationMarks1, listOfPositionsOfQuotationMarks2); 
                 i =                     
            }
            else
            {
                listOfBoxes.Add(text.Substring(listOfPositionsOfQuotationMarks2[g], listOfPositionsOfQuotationMarks2[g + 1] - listOfPositionsOfQuotationMarks2[g] + 1));                        
                WhenIGtrG(i, g, listOfPositionsOfQuotationMarks1, listOfPositionsOfQuotationMarks2);
            }
            break;
        }                
        goto end;
    }
    end:
    return listOfBoxes;
 }

public static Tuple<int, int> WhenILssG(int i, int g, List<int> listOfPositionsOfQuotationMarks1, List<int> listOfPositionsOfQuotationMarks2)
{
    i += 1;
    while (listOfPositionsOfQuotationMarks1[i] > listOfPositionsOfQuotationMarks2[g] && g < listOfPositionsOfQuotationMarks2.Count - 1)
    {
        g += 1;
    }
    i += 1;
    return new Tuple<int, int>(i, g);
 }


public static Tuple<int, int> WhenIGtrG(int i, int g, List<int> listOfPositionsOfQuotationMarks1, List<int> listOfPositionsOfQuotationMarks2)
{                                   
    g += 1;
    while (listOfPositionsOfQuotationMarks1[i] < listOfPositionsOfQuotationMarks2[g] && i < listOfPositionsOfQuotationMarks1.Count - 1)
    {
        i += 1;
    }
    g += 1;
    return new Tuple<int, int>(i, g);
 }

1 个答案:

答案 0 :(得分:3)

您正在使用面向对象的语言,因此请定义一个包含返回值的对象。

Tuple方法也没关系(尽管我认为它不太清楚,因此不太可取),但问题是你使用了错误的方法来创建它。您可以使用静态方法Tuple.Create创建新的Tuple

或者您可以在构造函数中明确说明Tuple的类型:var newTuple = new Tuple<int, int>(value1, value2)