假设我有:
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;
假设我有:
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;
你必须明确地使用字段和“正常”的属性,而不是一个自动实现的属性:
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");
这样,即使你需要这样做在多个地方,你可以使用一个临时变量。
你可以做到这一点,但不是一个属性。
public class Bob {
public int Value { get; set; } // This is a property
public int AnotherValue; // This is a field
}
你不能使用out
对Value
,但你可以在AnotherValue
。
这将工作
Int32.TryParse("123", out bob.AnotherValue);
但是,共同准则告诉你不要做一个类领域的公众。 所以,你应该使用临时变量的方法。