tho*_*ncp 75 c# properties out-parameters
假设我有:
public class Bob
{
public int Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想将Value成员作为out参数传递
Int32.TryParse("123", out bob.Value);
Run Code Online (Sandbox Code Playgroud)
但我得到一个编译错误,"'out'参数不归类为变量." 有没有办法实现这一点,或者我将不得不提取变量,àla:
int value;
Int32.TryParse("123", out value);
bob.Value = value;
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 79
您必须明确使用字段和"普通"属性而不是自动实现的属性:
public class Bob
{
private int value;
public int Value
{
get { return value; }
set { this.value = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
然后您可以将该字段作为out参数传递:
Int32.TryParse("123", out bob.value);
Run Code Online (Sandbox Code Playgroud)
但是,当然,这只能在同一个类中工作,因为该字段是私有的(应该是!).
属性只是不让你这样做.即使在VB中,您可以通过引用传递属性或将其用作out参数,基本上还有一个额外的临时变量.
如果您不关心返回值TryParse,您可以随时编写自己的帮助方法:
static int ParseOrDefault(string text)
{
int tmp;
int.TryParse(text, out tmp);
return tmp;
}
Run Code Online (Sandbox Code Playgroud)
然后使用:
bob.Value = Int32Helper.ParseOrDefault("123");
Run Code Online (Sandbox Code Playgroud)
这样,即使您需要在多个位置执行此操作,也可以使用单个临时变量.
您可以实现这一目标,但不能使用财产.
public class Bob {
public int Value { get; set; } // This is a property
public int AnotherValue; // This is a field
}
Run Code Online (Sandbox Code Playgroud)
不能使用out上Value,但你可以上AnotherValue.
这会奏效
Int32.TryParse("123", out bob.AnotherValue);
Run Code Online (Sandbox Code Playgroud)
但是,通用指南告诉您不要将类字段公开.所以你应该使用临时变量方法.