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

标签 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);
  }
}

我遇到错误无法分配给“this”,因为它是只读的

怎么可能?

最佳答案

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

前提是

Json contains serialized class 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 实例(调用的构造函数)。

而不是:

var response = new InstanceResponse(json);

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

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

附注

话虽如此,@Lasse Vågsæther Karlsen 就这个主题提出了一个有趣的观点。实际上可以给 this 分配一些东西,但它只能在 struct 构造函数内部工作,并且它的用例非常有限......(感谢 Lasse)

关于C# 如何为类创建构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53682804/

相关文章:

C# 控制台项目无法添加对 EF 的引用

java - 泛型、方法签名、赋值

generics - 可选地传递泛型参数?

java - 如何在 Scala 中从 JSON 解析通用类参数?

c# - Dotnet Core MVC - 仅将操作过滤器应用于特定 Controller

C# 调用 DataLakeDirectoryClient.CreateSubDirectoryAsync 创建子目录和同名的零字节文件

mysql - 如何使用 Entity Framework 向 mysql 添加可为空的数据类型?

c# - 在 C# 的对象列表中打印出 1 个对象

c# - 与 Caliburn Micro 问题的深度属性绑定(bind)

c# - 超时已过。在获得连接之前超时时间已过 首次连接