我试图调用该函数但我不能。是否有任何特定的方法来调用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);
答案 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;
}