[英]Is it possible to create an extension method both for Int32 and Int64?
假设我有一个像这样的扩展方法
public static IEnumerable<int> DoThings(this int n)
{
var mList = new List<int> { 2, 3, 4, 5 };
var result = new List<int>();
foreach(var m in mList)
result.Add(n * m);
return result;
}
有没有一种方法可以“泛化”,这样我就可以long
使用它并得到IEnumerable<long>
的结果?
如果我简单地使用public static IEnumerable<T> DoThings<T>(this T n)
很难在不以Cast <>结尾并转换涡旋的情况下进行数学运算
没有通用约束只适合Int32
( int
)和Int64
( long
), 而不适用于任何其他数字类型。
但是,您可以只创建两个扩展方法,其中一个引用另一个:
public static IEnumerable<int> DoThings(this int n)
{
return DoThings((long) n).Cast<int>();
}
public static IEnumerable<long> DoThings(this long n)
{
var mList = new List<int> { 2, 3, 4, 5 };
var result = new List<long>();
foreach(var m in mList)
result.Add(n * m);
return result;
}
请注意,结果也可能超出Int32
的最大数量,在这种情况下,调用int
-version时会收到InvalidCastException
。
但是,由于int
可以隐式地转换为long
,所以我看不到为什么您甚至想要两个方法。 long
使用它,完全不必理会int
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.