加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何使用泛型将参数传递给非泛型方法?

发布时间:2020-12-15 06:44:38 所属栏目:百科 来源:网络整理
导读:为什么以下代码无法编译? 如何创建一个泛型方法,根据泛型类型是“int”,“bool”,“char”等来调用适当的“BitConverter.GetBytes”重载? 更一般地说,如何创建一个基于泛型参数类型调用非泛型方法的泛型方法? using System;public class Test{ public sta
为什么以下代码无法编译?
如何创建一个泛型方法,根据泛型类型是“int”,“bool”,“char”等来调用适当的“BitConverter.GetBytes”重载?
更一般地说,如何创建一个基于泛型参数类型调用非泛型方法的泛型方法?
using System;

public class Test
{
    public static void Main()
    {
      var f = new Foo();
      f.GetBytes(10); // should call BitConverter.GetBytes(int);
      f.GetBytes(true); // should call BitConverter.GetBytes(bool);
      f.GetBytes('A'); // should call BitConverter.GetBytes(char);
    }
}

public class Foo
{
    public byte[] GetBytes <TSource> (TSource input)
    {
      BitConverter.GetBytes(input);
    }
}

解决方法

More generally,how can I create a generic method which calls a non-generic method based on the generic parameter’s type?

通常,您不能,除非有问题的方法将System.Object作为参数.问题是泛型不仅限于方法调用参数允许的类型.

您最接近的是使用运行时绑定:

public byte[] GetBytes <TSource> (TSource input)
{
     dynamic obj = input;
     BitConverter.GetBytes(obj);
}

这会将方法绑定逻辑推送到运行时,如果没有适当的方法可以调用,则会抛出.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读