【问题标题】:how to bind interface object to tweet object in c#如何在 C# 中将接口对象绑定到推文对象
【发布时间】:2020-03-22 01:51:02
【问题描述】:

我有一个方法 (GetUser()),方法返回类型是一个接口 (IUser),我有一个类 (User),包含与 IUser 相同的字段。我想将 GetUser 方法结果绑定到 User 对象。 我正在使用 c#。

方法:

 IEnumerable<IUser> GetUser();

界面:

public interface IUser {

     public string Id{ get; set;} 
     public string Name{ get; set;}
     public string Username{ get; set;}
     public IAddress Address{ get; set;}
     //And more fields
}

类:

public class User {

     public string Id{ get; set;} 
     public string Name{ get; set;}
     public string Username{ get; set;}
     public Address Address{ get; set;}
     //And more fields
}

我尝试了以下几种情况,但都不行。

IEnumerable<User> user = AnyLibrary.GetUser() as IEnumerable<User>;

IEnumerable<User> user = (IEnumerable<User>) AnyLibrary.GetUser();

有可能吗?我该怎么做?

【问题讨论】:

  • 你的用户类应该继承自 IUser - public class User : IUser
  • IUser继承User,这不是golang,它必须是显式的。
  • 还要注意Address也需要继承IAddress
  • @AndrewSavinykh Go 有隐式继承?有趣
  • 不是隐式继承,叫结构类型化。

标签: c# .net .net-core


【解决方案1】:

问题的真正解决方案是继承 Adam Vincent 和 stuartd 提到的 IUser 类。

但是如果不想从 Iuser 类继承。我想到的另一个解决方案是 json 序列化为 GetUser() 方法的结果并反序列化为 User 对象。

string users = JsonConvert.SerializeObject(AnyLibrary.GetUser());
IEnumerable<User> c_user = JsonConvert.DeserializeObject<IEnumerable<User>>(users);

这个解决方案对我很有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 2017-08-30
    • 2019-07-28
    • 1970-01-01
    • 2021-10-12
    • 2014-10-26
    相关资源
    最近更新 更多