C#泛型转换

LH806732 2017-08-04 04:08:12
泛型如何转换?

如下示例:

public class Animal<T>
{
public string Name { get; set; }
public T Property { get; set; }
}

public class Dog : Animal<Dog.Color>
{
public class Color
{
public string ColorName { get; set; }
}
}


dog无法转换成dog1?
Animal<Dog.Color> dog = new Dog();
Dog dog1 = dog;
...全文
776 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
OneOnce 2017-08-05
  • 打赏
  • 举报
回复
interface IAnimal<out T> { }
public class Animal<T> : IAnimal<T>
{
}
LH806732 2017-08-04
  • 打赏
  • 举报
回复
引用 15 楼 yuankaiwsl 的回复:
得到的java不需要反序列化成类吗?不是得到一个类吗?
直接反序列化为基类:
BaseDiagData<?> data = JsonToBean(json, DiagIndexes.getClass(BaseDiagData<BaseUIData>));
XBodhi. 2017-08-04
  • 打赏
  • 举报
回复
如果你想转换,有两种方式 第一: 类似 nulable<t> 的value 方式 第二:操作符重载。
巴士上的邂逅 2017-08-04
  • 打赏
  • 举报
回复
得到的java不需要反序列化成类吗?不是得到一个类吗?
巴士上的邂逅 2017-08-04
  • 打赏
  • 举报
回复
引用 12 楼 LH806732 的回复:
[quote=引用 11 楼 LH806732 的回复:] [quote=引用 9 楼 yuankaiwsl 的回复:] [quote=引用 7 楼 LH806732 的回复:] [quote=引用 5 楼 yuankaiwsl 的回复:] 这个没法转吧,逻辑有问题,就算是Animal<AnimalProperty>是Animal<Dog.Color>的父类,也没法将父类转化为子类啊
普通类可以,只是带了泛型就不可以,比较郁闷。 Java可以[/quote]你确定java可以?[/quote] 确定哈[/quote] 一样的代码从Android移植来的[/quote]我也是刚开始学java,将这代码复制过去,简单改了改,报错(今天刚安装了java开发环境,才开始学java基础知识)
LH806732 2017-08-04
  • 打赏
  • 举报
回复
引用 10 楼 yuankaiwsl 的回复:
你可以将你这N个类列出几个来,给你归纳一下
20来个界面,每个界面数据通过Json传递过来的,Json里面有个key叫“Data”,这个Data就是每个界面显示的数据,"Data"以外的数据是每个界面都是相同的,比如就是版本号啥的。
LH806732 2017-08-04
  • 打赏
  • 举报
回复
引用 11 楼 LH806732 的回复:
[quote=引用 9 楼 yuankaiwsl 的回复:] [quote=引用 7 楼 LH806732 的回复:] [quote=引用 5 楼 yuankaiwsl 的回复:] 这个没法转吧,逻辑有问题,就算是Animal<AnimalProperty>是Animal<Dog.Color>的父类,也没法将父类转化为子类啊
普通类可以,只是带了泛型就不可以,比较郁闷。 Java可以[/quote]你确定java可以?[/quote] 确定哈[/quote] 一样的代码从Android移植来的
LH806732 2017-08-04
  • 打赏
  • 举报
回复
引用 9 楼 yuankaiwsl 的回复:
[quote=引用 7 楼 LH806732 的回复:] [quote=引用 5 楼 yuankaiwsl 的回复:] 这个没法转吧,逻辑有问题,就算是Animal<AnimalProperty>是Animal<Dog.Color>的父类,也没法将父类转化为子类啊
普通类可以,只是带了泛型就不可以,比较郁闷。 Java可以[/quote]你确定java可以?[/quote] 确定哈
巴士上的邂逅 2017-08-04
  • 打赏
  • 举报
回复
你可以将你这N个类列出几个来,给你归纳一下
巴士上的邂逅 2017-08-04
  • 打赏
  • 举报
回复
引用 7 楼 LH806732 的回复:
[quote=引用 5 楼 yuankaiwsl 的回复:] 这个没法转吧,逻辑有问题,就算是Animal<AnimalProperty>是Animal<Dog.Color>的父类,也没法将父类转化为子类啊
普通类可以,只是带了泛型就不可以,比较郁闷。 Java可以[/quote]你确定java可以?
LH806732 2017-08-04
  • 打赏
  • 举报
回复
引用 6 楼 qq_35790053 的回复:
[quote=引用 5 楼 yuankaiwsl 的回复:] 这个没法转吧,逻辑有问题,就算是Animal<AnimalProperty>是Animal<Dog.Color>的父类,也没法将父类转化为子类啊
赞同,这转得类型有问题啊。错乱啊。 不知道楼主为什么玩[/quote] 就是有N个类,它们都有个类似的Animal有个Property的共通属性,我不想写在在各个类里面,就向放到基类里面。
LH806732 2017-08-04
  • 打赏
  • 举报
回复
引用 5 楼 yuankaiwsl 的回复:
这个没法转吧,逻辑有问题,就算是Animal<AnimalProperty>是Animal<Dog.Color>的父类,也没法将父类转化为子类啊
普通类可以,只是带了泛型就不可以,比较郁闷。 Java可以
Hobo丶 2017-08-04
  • 打赏
  • 举报
回复
引用 5 楼 yuankaiwsl 的回复:
这个没法转吧,逻辑有问题,就算是Animal<AnimalProperty>是Animal<Dog.Color>的父类,也没法将父类转化为子类啊
赞同,这转得类型有问题啊。错乱啊。 不知道楼主为什么玩
巴士上的邂逅 2017-08-04
  • 打赏
  • 举报
回复
这个没法转吧,逻辑有问题,就算是Animal<AnimalProperty>是Animal<Dog.Color>的父类,也没法将父类转化为子类啊
LH806732 2017-08-04
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
你这只能强转,不能隐式转换 而且你这个也不适合协变逆变的情况
引用 2 楼 qq_35790053 的回复:
无法将类型“Animal<.Dog.Color>”隐式转换为“.Dog”。 你得强制转换才行 Dog dog1 =(Dog)dog;
引用 3 楼 yuankaiwsl 的回复:
需要一个强转Dog dog1 = (Dog)dog;
刚才举例错了,应该是这样
public class Animal<T>
{
    public string Name { get; set; }
    public T Property { get; set; }
}

public class AnimalProperty
{
}

public class Dog : Animal<Dog.Color>
{
    public class Color : AnimalProperty
    {
        public string ColorName { get; set; }
    }
}
Animal<AnimalProperty> dog = new Animal<AnimalProperty>();
Dog dog1 = (Dog)dog;
巴士上的邂逅 2017-08-04
  • 打赏
  • 举报
回复
需要一个强转Dog dog1 = (Dog)dog;
Hobo丶 2017-08-04
  • 打赏
  • 举报
回复
无法将类型“Animal<.Dog.Color>”隐式转换为“.Dog”。 你得强制转换才行 Dog dog1 =(Dog)dog;
  • 打赏
  • 举报
回复
你这只能强转,不能隐式转换 而且你这个也不适合协变逆变的情况

110,477

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧