C#如何为类构造函数

时间:2018-12-08 13:02:48

标签: c# generics .net-core

我有一个带有通用参数的类Response

public class Response<T> where T : class {
  public bool Result;
  public T Data;
}

此外,我还有一个带有简单参数的类Instance

public sealed class Instance {
  public long Rank { get; set; }
  public int ID_Member { get; set; }
}

然后我有一堂课,我用的是最后一堂课

public sealed class InstanceResponse : Response<IList<Instance>> { }

我试图在最后一个类中添加一个构造函数,但不知道该怎么做

我已经尝试过了,但是没有用,JsonString包含序列化的类InstanceResponse

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

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

怎么可能?

1 个答案:

答案 0 :(得分:5)

不可能使用this关键字将json反序列化为对象并将其直接在ctor中直接分配给对象本身。

提供了

  

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

另一个可能的解决方案是在代码中反序列化json,以在某处创建InstanceResponse(调用ctor)的实例。

代替:

var response = new InstanceResponse(json);

您可以在此处反序列化json:

var response = JsonConvert.DeserializeObject<InstanceResponse>(json);

P.S。

话虽如此,@ LasseVågsætherKarlsen提出了关于该主题的有趣观点。实际上可以为this分配某些内容,但是它只能在struct的内部运行,并且用例非常有限...(感谢Lasse)