具有此扩展名
public static bool In<T>(this T t, params T[] values)
{
return values.Contains(t);
}
希望它在扩展内需要时接受IEnumerable并强制转换为数组,但是我不知道该如何使用params关键字。
尝试过:
public static bool In<T>(this T t, params IEnumerable<T> values)
{
return values.Contains(t);
}
但这会产生编译时错误:参数数组必须是一维数组
有什么方法可以使扩展方法支持IEnumerable参数?如果没有,为什么不呢?
不,这是不可能的,因为错误消息会直截了当地告诉您。
这是不可能的,因为规格说明这是不可能的。Microsoft之所以选择不实施建议的功能,可能是因为他们从未考虑过其好处大于成本。
您可以管理的最佳变通办法是创建两个重载,一个重载为,一个重载params
一个IEnumerable<T>
,并调用另一个(或者,由于您的方法非常简单,因此只需实现两个):
public static bool In<T>(this T t, params T[] values)
{
return In<T>(t, values.AsEnumerable());
}
public static bool In<T>(this T t, IEnumerable<T> values)
{
return values.Contains(t);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句