在C#中传递属性作为“out”参数

假设我有:

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

我想通过Value成员作为输出参数

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

但是我得到一个编译错误, “out”参数没有被分类为variables。 有没有办法做到这一点,或者我将不得不提取一个variables,拉:

 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; } } } 

然后,您可以将该字段作为输出parameter passing:

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

但是,当然,这只会在同一个class级内工作,因为这个领域是私人的(应该是!)。

属性只是不让你这样做。 即使在VB中,您可以通过引用传递属性,或者将它用作out参数,但基本上还有一个额外的临时variables。

如果你不关心TryParse的返回值,你可以随时编写自己的帮助器方法:

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

然后使用:

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

这样,即使您需要在多个位置执行此操作,也可以使用单个临时variables。

你可以做到这一点,但不能与财产。

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

你不能Value ,但你可以在AnotherValue

这将工作

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

但是,通用的指导方针告诉你不要公开课堂。 所以你应该使用临时variables的方法。

Interesting Posts