0

我有以下方法:

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

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

“阶段1”

“阶段2”

我有办法做到这一点吗?

4

2 回答 2

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];
于 2012-06-18T15:24:17.550 回答
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;
于 2012-06-18T15:25:22.777 回答