82

假设我有:

public class Bob
{
    public int Value { get; set; }
}

我想将Value成员作为输出参数传递,例如

Int32.TryParse("123", out bob.Value);

但我得到一个编译错误,“'out' 参数未被归类为变量。” 有没有办法实现这一点,或者我将不得不提取一个变量,à la:

int value;
Int32.TryParse("123", out value);
bob.Value = value;
4

2 回答 2

85

您必须明确使用字段和“普通”属性而不是自动实现的属性:

public class Bob
{
    private int value;
    public int Value
    { 
        get { return value; } 
        set { this.value = value; }
    }
}

然后您可以将该字段作为输出参数传递:

Int32.TryParse("123", out bob.value);

但是,当然,这只会在同一个类中起作用,因为该字段是私有的(并且应该是私有的!)。

属性只是不允许您这样做。即使在可以通过引用传递属性或将其用作输出参数的 VB 中,基本上也有一个额外的临时变量。

如果您不关心 的返回值TryParse,您总是可以编写自己的辅助方法:

static int ParseOrDefault(string text)
{
    int tmp;
    int.TryParse(text, out tmp);
    return tmp;
}

然后使用:

bob.Value = Int32Helper.ParseOrDefault("123");

这样,即使您需要在多个地方执行此操作,您也可以使用单个临时变量。

于 2009-09-02T21:34:02.260 回答
8

您可以实现这一点,但不能使用属性。

public class Bob {
    public int Value { get; set; } // This is a property

    public int AnotherValue; // This is a field
}

您不能使用outon Value,但可以使用 on AnotherValue

这将起作用

Int32.TryParse("123", out bob.AnotherValue);

但是,通用准则告诉您不要公开类字段。所以你应该使用临时变量的方法。

于 2009-09-02T21:35:34.880 回答