假设我有:
public class Bob
{
public int Value { get; set; }
}
我想将Value成员作为out参数传递
Int32.TryParse("123", out bob.Value);
但出现编译错误,“'out'参数未归类为变量”。 有什么方法可以实现这一目标,或者我将不得不提取一个变量,例如:
int value;
Int32.TryParse("123", out value);
bob.Value = value;
Answers:
您必须显式使用字段和“常规”属性,而不是自动实现的属性:
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");
这样,即使您需要在多个位置执行此操作,也可以使用单个临时变量。
您可以实现该目标,但不能使用属性。
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);
但是,通用准则告诉您不要公开一个课堂领域。因此,您应该使用临时变量方法。