C# C语言中整数的生成集#
在F#中,您可以生成一组数字,只需说出[1..100] 我想在C#中做类似的事情。这就是我到目前为止的想法:C# C语言中整数的生成集#,c#,set,C#,Set,在F#中,您可以生成一组数字,只需说出[1..100] 我想在C#中做类似的事情。这就是我到目前为止的想法: public static int[] To(this int start, int end) { var result = new List<int>(); for(int i = start; i <= end; i++) result.Add(i); return result.ToArray(); } 我仍然在寻找关于1
public static int[] To(this int start, int end)
{
var result = new List<int>();
for(int i = start; i <= end; i++)
result.Add(i);
return result.ToArray();
}
我仍然在寻找关于1.To(100)可枚举范围(1100)可读性的想法 我认为像
Set(1100)
或IntSequence(1100)
这样的东西比使用扩展方法更容易阅读
但是个人意见…我喜欢使用
来
的想法。可选的Enumerable.Range
在imo中有一个细微的缺陷。第二个参数是而不是最后一个元素的值,它是枚举的长度。这就是我过去所做的:
public IEnumerable<int> To(this int start, int stop)
{
while (start <= stop)
yield return start++;
}
你对自己问题的回答很好。如果你关心性能,就不要使用列表。构建一个列表并不断扩展它是愚蠢的。只需构造一个大小合适的数组。使用扩展方法
public static int[] To(this int num)
{
//do work
}
我认为你太担心这种语言不能准确地表达你想要的特定句法 在我看来,扩展方法是一种很好的方法,但我想知道你是否真的用它来证明扩展方法的“惊喜” 在C#语言的领域中,通过方法名来说明您正在尝试做什么更合适。这感觉更像是Ruby而不是C。这感觉更像是它想要自己在课堂上,特别是如果你想添加带有跳过模式的范围(即,数字从1到10乘3)。我认为
public class RangedArray {
public static int[] Generate(int from, into to, int by=1) { /* ... */ }
}
用C#来表达这一点是完全可以接受的。这种方法很有用。谢谢它的可读性不如1.To(100),但我至少可以在To()的实现中使用它。。。这是因为我实际上需要一个数组,它变成:Enumerable.Range(1100).ToArray(),我想说1.To(100)可能会被误解。对我来说,这听起来像一个演员。此外,Enumerable.Range还有在.net框架中实现的优点,因此可能会为更多人所熟悉。这就是我所寻找的。我真的不想把Enumerable.Range(5,2).ToArray()写成新的[]{5,6,7}。我理解5.To(7)可能会让人困惑,但它比枚举行读起来更好。我在寻找比5更具可读性的建议。To(7)向int之类的东西添加扩展方法让我觉得有点恶心。我会避免使用“Set”,因为它的意思是wrt:properties,我更喜欢看到Sequence而不是IntSequenceYes,长度上的优点,而不是值的微妙之处。我需要它是一个数组,而不是一个IEnumerable,所以这里的收益率并没有给我带来任何好处。请看我在OPS中的编辑您可以这样做,但在生成集合时您确实牺牲了可读性…感谢您的评论。我重读了这篇文章,意识到我写的正是你写的。。。很抱歉。:-)这是扩展方法的巧妙运用。我同意。但是,您的默认参数是C#4。。。让一些人困惑的是,现在(预rtm)您是否有创建数组而不是IEnumerable的特定需求?如果是这样的话,我很好奇你提出这个要求的理由是什么。
public static int[] To(this int num)
{
//do work
}
public class RangedArray {
public static int[] Generate(int from, into to, int by=1) { /* ... */ }
}