繁体   English   中英

是否可以为Int32和Int64创建扩展方法?

[英]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 <>结尾并转换涡旋的情况下进行数学运算

没有通用约束只适合Int32int )和Int64long ), 而不适用于任何其他数字类型。

但是,您可以只创建两个扩展方法,其中一个引用另一个:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM