我想创建一个新对象,并在对象创建期间进行RPC调用以获取其属性,然后返回填充了该属性的对象。参见以下示例:
using Newtonsoft.Json;
class Person
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public Person(int Id)
{
// here would be an RPC call to get the FirstName,LastName. result is JSON
string result = "{\"Id\": 1, \"FirstName\": \"Bob\", \"LastName\": \"Jones\"}";
this = JsonConvert.DeserializeObject<Person>(result);
}
}
class Program
{
static void Main(string[] args)
{
var p = new Person(1);
// p.FirstName should be Bob
}
}
我不知道如何在没有获取StackOverflow异常的情况下在构造函数中执行此操作。
答案 0 :(得分:0)
要考虑的一种选择是在Person
内使用静态方法:
public static Person GetPerson(int Id)
{
// here would be an RPC call to get the FirstName,LastName. result is JSON
string result = "{\"Id\": 1, \"FirstName\": \"Bob\", \"LastName\": \"Jones\"}";
return JsonConvert.DeserializeObject<Person>(result);
}
这避免了原始代码的递归性质。
另一个选择是将class
更改为struct
。 struct
s允许您分配给this
(不同于class
es)。而且它们有一个默认的构造函数(与您的带参数的构造函数分开),因此没有递归行为。