一种执行两种功能的方法

时间:2012-06-18 15:15:50

标签: c# string

我有以下方法:

public string Phase(string phase)
{
    return "Phase 1";
}

问题是我需要它在2个不同的标签中输出2个字符串:

“第1阶段”

“第2阶段”

我有办法做到这一点吗?

2 个答案:

答案 0 :(得分:5)

您有几个选项可以返回多个值。

例如,您可以返回IEnumerable<string>(或其他一些集合)。您还可以返回Tuple<string,string>

public IEnumerable<string> Phase()
{
    yield return "Phase 1";
    yield return "Phase 2";
}

或者

public Tuple<string,string> Phase()
{
    return Tuple.Create("Phase 1", "Phase 2");
}

话虽如此,使用两个单独的方法(或属性)返回每个字符串可能更简单,而不是试图强制它进入单个方法调用。

另一种选择是传入一个允许方法选择返回哪个标签的参数:

public string Phase(int phase)
{
    switch(phase)
    {
        default:
            return "Phase 1";
        case 2:
            return "Phase 2";
    }

    // Or just
    // return "Phase " + phase.ToString();

}

编辑:

鉴于您的意见,我建议刚刚返回数组的属性:

public string[] Phases
{
    get { return new[] { "Phase 1", "Phase 2" }; }
}

然后您可以将其用作:

var phases = this.month1.Phases;
this.lblPhase.Text = phases[0];
this.lblPhase2.Text = phases[1];

答案 1 :(得分:3)

如果方法在标签所在的范围内(同一表格的一部分),那么在方法中您只需设置标签的值:

public void Phase(string phase)
{
    label1.Text = "Phase 1";
    label2.Text = "Phase 2";
}

如果它与标签不在同一范围内,并且您要返回要设置的标签的值,则可以使用元组:

public Tuple<String, String> Phase(string phase)
{
    return new Tuple<string, string>("Phase 1", "Phase 2");
}

然后,当您从返回集中收到返回值时,标签如下:

编辑以反映OP的重定向

var answer = month1.Phase("Phase");
label1.Text = answer.Item1;
label2.Text = answer.Item2;