隐式转换泛型类型对象

理查德·陈

我有一个这样的课:

public class Response<T>
{
    public T Value { get; set; }
    public static implicit operator T(Response<T> res)
    {
        return res.Value;
    }
}

我通过三种方式使用隐式运算符:

public void Demo()
{           
    IList<int> good = test() as IList<int>; // This line is no problem 
    string good2 = test2(); // This line is no problem 
    IList<int> bad = test(); //Why this line doesn't work?
}

public Response<IList<int>> test()
{
    return new Response<IList<int>>();
}
public Response<string> test2()
{
    return new Response<string>();
}

为什么IList<int> bad = test()不起作用,但显示“无法将类型'Response>'隐式转换为'System.Collections.Generic.IList'。存在显式转换(您是否缺少类型转换?)”

Zohar Peled

在有关转换运算符的部分中,我发现您的答案深藏在c#语言规范的内部

如果T是接口类型,则将忽略用户定义的从S到T的隐式转换。

这意味着,如果您更改IListList,则隐式转换应该可以正常工作:

public static void Main(string[] args)
{
    IList<int> good = test() as IList<int>; // This line is no problem 
    string good2 = test2(); // This line is no problem 
    List<int> good3 = test3(); // This line works as well
    //IList<int> bad = test(); // This fails...
}

static Response<IList<int>> test()
{
    return new Response<IList<int>>();
}

static Response<List<int>> test3()
{
    return new Response<List<int>>();
}
static Response<string> test2()
{
    return new Response<string>();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C#中的泛型继承:无法将类型“ MyWidget”隐式转换为“ IWidget”

来自分类Dev

泛型类型的隐式转换?

来自分类Dev

检查null时,泛型函数是否将值类型隐式转换为对象?

来自分类Dev

抽象泛型隐式转换为派生类型,错误?

来自分类Dev

将泛型类型的对象转换为子类型

来自分类Dev

泛型类型的转换

来自分类Dev

泛型的乐趣:没有隐式引用转换错误

来自分类Dev

在泛型类隐式类型参数

来自分类Dev

泛型基类的隐式引用转换完成错误

来自分类Dev

隐式定义的泛型类型,这可能吗?

来自分类Dev

泛型类的子类型的隐式类

来自分类Dev

隐式泛型类型转换无法匹配重载的方法签名

来自分类Dev

泛型中的多态性-传递继承的对象时发生编译错误(无法隐式转换类型)

来自分类Dev

隐式转换集合的泛型

来自分类Dev

返回与泛型定义的类型不同的类型的错误:“无法将类型List <A>隐式转换为List <tableType>”

来自分类Dev

为什么对对象类型转换通用的是隐式的?

来自分类Dev

抽象泛型隐式转换为派生类型,错误吗?

来自分类Dev

将泛型类型的对象转换为子类型

来自分类Dev

泛型类中的隐式类型参数

来自分类Dev

隐式地将泛型转换为包装器

来自分类Dev

Scala:泛型类型的隐式证据

来自分类Dev

隐式定义的泛型类型,这可能吗?

来自分类Dev

具有隐式泛型类型的Scala模拟函数

来自分类Dev

无法将派生类型隐式转换为基本泛型类型

来自分类Dev

转换泛型类型对象

来自分类Dev

C# 尝试返回泛型列表“不能隐式转换类型”

来自分类Dev

Scala 泛型隐式 val

来自分类Dev

没有从泛型类型到“System.Data.Objects.DataClasses.EntityObject”的隐式引用转换

来自分类Dev

转换泛型类型

Related 相关文章

  1. 1

    C#中的泛型继承:无法将类型“ MyWidget”隐式转换为“ IWidget”

  2. 2

    泛型类型的隐式转换?

  3. 3

    检查null时,泛型函数是否将值类型隐式转换为对象?

  4. 4

    抽象泛型隐式转换为派生类型,错误?

  5. 5

    将泛型类型的对象转换为子类型

  6. 6

    泛型类型的转换

  7. 7

    泛型的乐趣:没有隐式引用转换错误

  8. 8

    在泛型类隐式类型参数

  9. 9

    泛型基类的隐式引用转换完成错误

  10. 10

    隐式定义的泛型类型,这可能吗?

  11. 11

    泛型类的子类型的隐式类

  12. 12

    隐式泛型类型转换无法匹配重载的方法签名

  13. 13

    泛型中的多态性-传递继承的对象时发生编译错误(无法隐式转换类型)

  14. 14

    隐式转换集合的泛型

  15. 15

    返回与泛型定义的类型不同的类型的错误:“无法将类型List <A>隐式转换为List <tableType>”

  16. 16

    为什么对对象类型转换通用的是隐式的?

  17. 17

    抽象泛型隐式转换为派生类型,错误吗?

  18. 18

    将泛型类型的对象转换为子类型

  19. 19

    泛型类中的隐式类型参数

  20. 20

    隐式地将泛型转换为包装器

  21. 21

    Scala:泛型类型的隐式证据

  22. 22

    隐式定义的泛型类型,这可能吗?

  23. 23

    具有隐式泛型类型的Scala模拟函数

  24. 24

    无法将派生类型隐式转换为基本泛型类型

  25. 25

    转换泛型类型对象

  26. 26

    C# 尝试返回泛型列表“不能隐式转换类型”

  27. 27

    Scala 泛型隐式 val

  28. 28

    没有从泛型类型到“System.Data.Objects.DataClasses.EntityObject”的隐式引用转换

  29. 29

    转换泛型类型

热门标签

归档