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;
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)
{
}
}
但即便如此,如果您使用反射,这只是一个好主意。
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;
}
}
}
- 3 回答
- 0 关注
- 179 浏览
添加回答
举报