c# pass property backing value by reference, is it possible?
从我之前的问题开始:C-sharp-convert-existing-class-to-use-properties-correct
我有一个这样的班级:
1 2 3 4 5 6 7 8 9 | public class TestCaseInfo { public string text { get; set; } =""; public string requirement_ref { get; set; } =""; public string given { get; set; } =""; public string when { get; set; } =""; public string then { get; set; } =""; public UInt32 timeLimit { get; set; } = 0; } |
我以前是这样填充结构的:
1 2 | if (!getNodeValue(testcase_node.SelectSingleNode("text"), ref testcaseInfo.text)) errStr += nodeError(testcase_node,"Missing 'text' node"); |
注意:我正试图通过引用传递它。我读过很多的问答,基本上都说你不能这样做。够公平的…
所以我想传递"真实"值(我认为它被称为支持值?)相反。类似:
2但我错过了两件事(可能更多!):
该属性的支持字段没有有效的标识符。您不能使用auto属性,而是显式定义属性的
您应该做的是重新设计代码,这样就不需要首先通过引用传递值。您应该按值传递字符串,如果函数的结果是字符串的计算,则返回该字符串。然后,调用者可以将该字符串设置回他们想要的属性。那将是更惯用的设计。(当然,因为您还有一个布尔值,所以需要同时传递字符串和布尔值。)
就您而言,您的属性也可能没有支持字段。如果没有显式声明,那么backing字段就不会被调用任何可以引用的内容:
1 2 | private string _name; public String Name { get { return _name; } set { _name = value; } } |
如果使用显式的支持字段编写属性,如上所述,可以通过
1 2 3 4 5 6 7 | private int _id; public String ID { get { return int _id; } set { int _id = value; } } public void Test() { Int32.TryParse("Sausage Factory", out _id); } |