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

如何获取泛型参数的类型

如何获取泛型参数的类型

C#
繁星点点滴滴 2021-11-14 10:11:59
我无法确定应用程序中通用参数的类型。情况就像下面的代码。当我得到一个泛型时ICollection,我需要计数。如果没有,我需要处理单个对象。using System;using System.Collections.Generic;namespace ConsoleApp1{    class Cat    {        public int Id { get; set; }    }    class Program    {        static void Main(string[] args)        {            Cat cat1 = new Cat { Id = 1 };            Cat cat2 = new Cat { Id = 2 };            ICollection<Cat> cats = new List<Cat>();            cats.Add(cat1);            cats.Add(cat2);            TestMethod<ICollection<Cat>>(cats);            TestMethod<Cat>(cat1);        }        public static void TestMethod<T>(T parameter)        {            //if parameter is <ICollection<Cat>>, get count of cats?            //else if (T is Cat), get id of the cat?        }    }}我提错了问题,它可以是猫、狗、老鼠或其他任何东西。我不知道它是什么,我也不需要。我正在尝试下面的代码并遇到铸造错误。((ICollection)parameter).Count;如果它是任何对象的 ICollection,我只需要计数。非常感谢所有的答案。
查看完整描述

3 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

   int result;

        if (parameter is ICollection<Cat>)

            result = (parameter as (ICollection<Cat>)).Count;

        else if (parameter is Cat)

            result = (parameter as Cat).Id;


查看完整回答
反对 回复 2021-11-14
?
大话西游666

TA贡献1817条经验 获得超14个赞

这不是您想要使用泛型的情况,因为这不是泛型的目的。


你在这里有两个选择。


要么你做两个这样的方法:


public void TestMethod(Cat cat) {...}

public void TestMethod(ICollection<Cat> cats) {...}

或者,如果您确实需要这种通用方法,则使用对象作为参数。


 public void TestMethod(object obj) 

 {

    Cat cat = obj as cat;

    if(cat != null)

    { 


        return;

    }

    ICollection<Cat> cats = obj as ICollection<Cat>;

    if(cats != null)

    {


    }

 }

但即便如此,如果您使用反射,这只是一个好主意。


查看完整回答
反对 回复 2021-11-14
?
SMILET

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

试试这个可能对你有帮助


class Cat

{

    public int Id { get; set; }

}

class Program

{

    static void Main(string[] args)

    {

        Cat cat1 = new Cat { Id = 1 };

        Cat cat2 = new Cat { Id = 2 };

        ICollection<Cat> cats = new List<Cat>();

        cats.Add(cat1);

        cats.Add(cat2);

        TestMethod<ICollection<Cat>>(cats);


        TestMethod<Cat>(cat1);

    }

    public static void TestMethod<T>(T parameter)

    {

        if (typeof(T) == typeof(ICollection<Cat>))  //if (parameter is ICollection<Cat>)

        {

            ICollection<Cat> cats = parameter as ICollection<Cat>;


            //Count your cats in count variable

            int count = cats.Count;

        }

        else

        if (typeof(T) == typeof(Cat))  // if (parameter is Cat)

        {

            Cat cat = parameter as Cat;


            //Get id of your cat in id variable

            int id = cat.Id;

        }

    }

}


查看完整回答
反对 回复 2021-11-14
  • 3 回答
  • 0 关注
  • 179 浏览

添加回答

举报

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