假设我有:
public class Bob
{
public int Value { get; set; }
}
我想将 Value 成员作为out参数传递,如
Int32.TryParse("123", out bob.Value);
但是我收到了编译错误,“'out'参数未被归类为变量。”有没有办法实现这一点,或者我将不得不提取变量,à LA:
int value;
Int32.TryParse("123", out value);
bob.Value = value;
答案 0 :(得分:78)
您必须明确使用字段和“普通”属性,而不是自动实现的属性:
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
的返回值,您可以随时编写自己的帮助方法:
static int ParseOrDefault(string text)
{
int tmp;
int.TryParse(text, out tmp);
return tmp;
}
然后使用:
bob.Value = Int32Helper.ParseOrDefault("123");
即使您需要在多个地方执行此操作,也可以使用单个临时变量。
答案 1 :(得分:5)
你可以实现这一目标,但不能使用财产。
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);
但是,通用指南告诉您不要将类字段公开。所以你应该使用临时变量方法。