Например, для целочисленного массива может быть метод max.Является ли принцип всегда иметь самые абстрактные параметры, и если у него есть имя?
public static int Max(int[] ints)
{
var max = ints[0];
foreach(var i in ints)
{
if(i > max)
{
max = i;
}
}
return max;
}
Но на самом деле мы не использовали тот факт, что были, были с помощью массива, только что мы могли бы перебрать их, и мы не нуждались в Интс, мы просто нужен объект, который знает, как себя сравнивать , Таким образом, более мощный метод может быть:
public static T MyMax<T>(IEnumerable<T> ts) where T : IComparable<T>
{
var max = ts.First();
foreach(var i in ts)
{
if(i.CompareTo(max) > 0)
{
max = i;
}
}
return max;
}
И я думаю, приведенным выше обесцениваю факт, что IEnumerable<T>
может быть бесконечным, которое вызвало бы это зависнуть, но тогда почему вы пытаетесь найти Макс Фо бесконечного истребитель в первую очередь.
Точка, которую я пытаюсь сделать, заключается в том, что второй метод намного эффективнее первого, поскольку он делает минимальные предположения о его параметрах по мере необходимости. Есть ли название для такого принципа? Это даже вещь?
Заранее спасибо.
общего назначения, общий и т. Д. – sstan
@sstan: Хотя я согласен, что результат включает в себя дженерики или является более общей целью, мне интересно, нет ли названия для принципа, в котором хотелось бы активно искать наиболее возможно общее решение. Я думаю, что даже это можно было бы сделать более общим, поскольку мы могли бы просто использовать оператор агрегирования с переданным Макс. – user420667
Первый linq реализует тот же метод, но, учитывая другие вещи. Я думаю, вы должны взглянуть на [it] (http://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs,b7b87afe6c3fc715), ищите (Макс.). Я не знаю о имени шаблона для этого подхода. Я думаю, что это очень близко к функциональному языку или декларативному программированию, но не к способу написания этой функции, а скорее к тому, как это будет использоваться, если это имеет смысл. –