public static IEnumerable <int>方法</int>

时间:2013-12-09 14:04:41

标签: c# syntax ienumerable

我试图调用该函数但我不能。是否有任何特定的方法来调用IEnumerable方法?

这是功能。

public static IEnumerable<int> UpTo(this int minValue, int maxValue)
{
    return  maxValue < minValue ? Enumerable.Empty<int>() : Enumerable.Range(minValue, maxValue - minValue + 1);
}

我试图像这样调用函数

var newContainer = new List<int>();
newContainer.Add(1);
newContainer.Add(2);
newContainer.Add(3);
newContainer.Add(4);

var formattedContainer = newContainer.UpTo(10);

4 个答案:

答案 0 :(得分:1)

您有一个简单的参数不匹配:您的扩展方法将int声明为this - 参数,而您尝试将其应用于List<int>

答案 1 :(得分:0)

该功能应该是:

public static IEnumerable<int> UpTo(this Enumerable<int>, int minValue, int maxValue)
{
    return  maxValue < minValue ? Enumerable.Empty<int>() : Enumerable.Range(minValue, maxValue - minValue + 1);
}

答案 2 :(得分:0)

如果你想创建一个新的枚举,比如Enumerable.Range,那么不要使用这个参数而不要在列表上调用它,让它像Enumerable.Range一样工作。 MyClassName.UpTo(2, 3)有道理,但我没有看到你newContainer.UpTo(10);的意思。后一个调用等同于MyClassname.UpTo(newContainer, 10),第一个参数不是数字。

答案 3 :(得分:0)

这不起作用,因为你扩展int但是你在List<int>上使用它。如果您希望使用方法int扩展UpTo,该方法会将此数字的序列创建为上限maxValue

public static IEnumerable<int> UpTo(this int minValue, int maxValue)
{
    if (maxValue > minValue)
        return Enumerable.Range(minValue, maxValue - minValue + 1);
    else
        return Enumerable.Empty<int>();
}

现在您需要在int上调用它:

IEnumerable<int> sequence = 4.UpTo(10);
Console.Write(string.Join(",", sequence));

输出:4,5,6,7,8,9,10


如果您想扩展List<T>,则需要使用this关键字作为第一个参数。

public static void AddUpTo(this List<int> list, int minValue, int maxValue)
{
    if (maxValue > minValue)
    {
        list.AddRange(Enumerable.Range(minValue, maxValue - minValue));
    }
}

或者,如果您想允许效率较低的IEnumerable<int>

public static IEnumerable<int> UpTo(this IEnumerable<int> sequence, int minValue, int maxValue)
{
    if (maxValue > minValue)
        return sequence.Concat(Enumerable.Range(minValue, maxValue - minValue));
    else
        return sequence;
}