传递特性,以与C#的“出”参数(Passing a property as an 'out&

2019-07-04 12:39发布

假设我有:

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

我想Value成员传递作为out参数一样

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

但我得到一个编译错误,“‘出’参数不属于变量”。 有什么办法来实现这一点,还是我将不得不提取变量,点菜:

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

Answer 1:

你必须明确地使用字段和“正常”的属性,而不是一个自动实现的属性:

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

然后,你可以通过作为一个out参数:

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

不过,当然,这只会在同一个类中工作,因为该领域是私有的(也应该!)。

属性只是没有让你这样做。 即使在VB中,你可以通过引用传递一个属性或使用它作为out参数,也基本上是一个额外的临时变量。

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

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

然后使用:

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

这样,即使你需要这样做在多个地方,你可以使用一个临时变量。



Answer 2:

你可以做到这一点,但不是一个属性。

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

    public int AnotherValue; // This is a field
}

你不能使用outValue ,但你可以在AnotherValue

这将工作

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

但是,共同准则告诉你不要做一个类领域的公众。 所以,你应该使用临时变量的方法。



文章来源: Passing a property as an 'out' parameter in C#