为了账号安全,请及时绑定邮箱和手机立即绑定

我已经发送了 2 个通用参数,第一个是 char,第二个是 int 为什么第一个如果

我已经发送了 2 个通用参数,第一个是 char,第二个是 int 为什么第一个如果

C#
泛舟湖上清波郎朗 2021-10-09 16:30:35
我已经向 func 发送了两个通用参数,并简单地询问它们是否是 int 类型,我将其中一个作为 char 发送,第二个作为 int 发送,但仍然 if cindison is work exsample :结果是第一个 if cond is work我真的不明白为什么因为第一个 arg 是 charusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApp5{    class Program    {        public static T Adds<T>(T number1 , T number2 )        {            if ((number1 is int) && (number2 is int))            {                Console.WriteLine("int test");            }            else if (number1 is double )            {                Console.WriteLine("double test");            }            return number1;        }        public static void Main(string[] args)        {            Console.WriteLine(Adds('c',2));        }    }}
查看完整描述

3 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

这是你想要做的:


class Program

{

    public static T Adds<T>(object number1, object number2)

    {

        if ((number1 is int) && (number2 is int))

        {

            Console.WriteLine("int test");

        }

        else if (number1 is double)

        {

            Console.WriteLine("double test");

        }

        return (T)Convert.ChangeType(number1, typeof(T));

    }


    public static void Main(string[] args)

    {


        Console.WriteLine(Adds<int>('c', 2));

    }

}


查看完整回答
反对 回复 2021-10-09
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

当前签名


 T Adds<T>(T number1, T number2)

确保两个参数number1和number2必须是相同的类型。这就是为什么


 Add('c', 2)

 Add(1, 3.14)

将被执行为


 Add<int>((int)'c', 2);

 Add<double>((double)1, 3.14);

因为char可以隐式转换为int并且(第二个示例)int可以 隐式转换为double. 如果你想用自己的类型来对待每个参数,试试


// T1 Adds<T1, T2>: if Adds return 1st parameter

// T2 Adds<T1, T2>: if Adds return 2nd parameter 

T1 Adds<T1, T2>(T1 number1, T2 number2) {

  ...

}

在这种情况下


Add('c', 2)

将被称为


// No conversion: T1 is char, T2 is int

Add<char, int>('c', 2)


查看完整回答
反对 回复 2021-10-09
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

您已使用单个泛型类型声明了该方法。如果您希望参数具有单独的类型,则必须声明

public static T Adds<T,T2>(T number1 , T2 number2 )


查看完整回答
反对 回复 2021-10-09
  • 3 回答
  • 0 关注
  • 176 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信