C#如何为类创建构造函数

Igo*_*ova 2 c# generics .net-core

我有一个Response带泛型参数的类:

public class Response<T> where T : class {
  public bool Result;
  public T Data;
}
Run Code Online (Sandbox Code Playgroud)

另外,我有一个Instance简单参数的类

public sealed class Instance {
  public long Rank { get; set; }
  public int ID_Member { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个课程,我使用最后一个

public sealed class InstanceResponse : Response<IList<Instance>> { }
Run Code Online (Sandbox Code Playgroud)

我尝试在最后一堂课中添加一个构造函数,但不明白该怎么做

我尝试过那样,但它不起作用,JsonString包含序列化类InstanceResponse

public sealed class InstanceResponse : Response<IList<Instance>> {
  public InstanceResponse(string JsonString) {
    this = JsonConvert.DeserializeObject<InstanceResponse>(JsonString);
  }
}
Run Code Online (Sandbox Code Playgroud)

我有一个错误 Cannot assign to 'this' because it is read-only

怎么可能?

Fab*_*jan 5

无法将json反序列化为对象,并使用this关键字将其直接分配给对象本身.

只要

Json包含序列化类InstanceResponse

你可以这样做:

public sealed class InstanceResponse : Response<IList<Instance>> {
  public InstanceResponse(string JsonString) {
    var response = JsonConvert.DeserializeObject<InstanceResponse>(JsonString);
    this.Data = response.Data;
    this.Result = response.Result;
  }
}
Run Code Online (Sandbox Code Playgroud)

另一种可能的解决方案是在代码中反序列化json,该代码在InstanceResponse某处创建(call's ctor)实例.

代替:

var response = new InstanceResponse(json);
Run Code Online (Sandbox Code Playgroud)

您可以在那里反序列化json:

var response = JsonConvert.DeserializeObject<InstanceResponse>(json);
Run Code Online (Sandbox Code Playgroud)

PS

话虽如此,@LasseVågsætherKarlsen提出了一个有趣的观点.实际上可以分配一些东西,this但它只在一个structstor中工作,而用例非常有限......(谢谢Lasse)

  • 只是一些不必要的信息:你可以在结构的构造函数中分配给`this`.虽然不是一个非常有用的信息.这通常在"复制构造函数"中完成.除了知道它是什么,如果你看到它,我只能想到有用的东西. (2认同)