Вы использовали неверное значение в заголовке
static navigationOptions = {
header: "none"
};
Замените "none"
на null
static navigationOptions = {
header: null
};
С только что выпущенной Ubuntu 9.04 очень актуальная среда разработки Mono настолько близка:
apt-get install monodevelop
Раньше я соглашался с вами, что было довольно сложно начать работу с Mono, но последняя версия Ubuntu растопила этот барьер. И последняя версия Monodevelop - абсолютная радость в использовании.
Не используете Ubuntu? Тогда я согласился бы с советом Питера об использовании образа VMWare .
переопределяет один для List
, но он будет работать для любого другого класса, который реализует IEnumerable
.
public static class IEnumerableExtensions
{
public static void ForEach<T>(this IEnumerable<T> source, Action<T> action)
{
foreach (T item in source)
action(item);
}
}
Because ForEach()
on an IEnumerable is just a normal for each loop like this:
for each T item in MyEnumerable
{
// Action<T> goes here
}
Я просто догадываюсь здесь, но установка foreach на IEnumerable заставит операции с ним иметь побочные эффекты. Ни один из «доступных» методов расширения не вызывает побочных эффектов, поэтому использование такого императивного метода, как foreach, не запутает API. Кроме того, foreach инициализировал бы ленивую коллекцию.
Лично я отбивался от соблазна просто добавить свои собственные, просто чтобы отделить функции без побочных эффектов отдельно от функций с побочными эффектами.
ForEach нет в IList, он в списке. Вы использовали конкретный список в вашем примере.
Просто предположение, но List может перебирать свои элементы без создания перечислителя:
public void ForEach(Action<T> action)
{
if (action == null)
{
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.match);
}
for (int i = 0; i < this._size; i++)
{
action(this._items[i]);
}
}
Это может привести к повышению производительности. С IEnumerable у вас нет возможности использовать обычный цикл for.
Это называется "Выбрать" на
Я просвещен, спасибо. IEnumerable
LINQ follows the pull-model and all its (extension) methods should return IEnumerable
, except for ToList()
. The ToList()
is there to end the pull-chain.
ForEach()
is from the push-model world.
You can still write your own extension method to do this, as pointed out by Samuel.
По словам Эрика Липперта, это в основном по философским причинам . Вам следует прочитать весь пост, но, насколько я понимаю, суть такова:
Я философски против предоставление такого метода для двоих причин.
Первая причина в том, что это нарушает функциональное программирование принципы, что все остальные последовательности операторы основаны на. Ясно единственная цель вызова этого метода вызывает побочные эффекты.
Цель выражения - вычислить значение, чтобы не вызвать побочную эффект. Цель заявления - вызвать побочный эффект. Сайт звонка из этой вещи будет выглядеть ужасно как выражение (хотя, по общему признанию, поскольку метод возвращает пустоту, выражение могло использоваться только в «заявлении» выражение "контекст.)
Мне не нравится делать единственный оператор последовательности это полезно только для его стороны
Вторая причина в том, что это добавляет нулевую новую репрезентативную силу на язык.
Честно говоря, я точно не знаю, почему .ForEach (Action) не включен в IEnumerable, но правильно, неправильно или безразлично, так оно и есть ...
Однако я ДЕЙСТВИТЕЛЬНО хотел выделить проблему производительности, упомянутую в других комментариях. Производительность снижается в зависимости от того, как вы перебираете коллекцию. Это относительно незначительно, но тем не менее, безусловно, существует. Вот невероятно быстрый и неаккуратный фрагмент кода, чтобы показать взаимосвязи ... всего за минуту или около того, чтобы его прочесть.
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Start Loop timing test: loading collection...");
List<int> l = new List<int>();
for (long i = 0; i < 60000000; i++)
{
l.Add(Convert.ToInt32(i));
}
Console.WriteLine("Collection loaded with {0} elements: start timings",l.Count());
Console.WriteLine("\n<===============================================>\n");
Console.WriteLine("foreach loop test starting...");
DateTime start = DateTime.Now;
//l.ForEach(x => l[x].ToString());
foreach (int x in l)
l[x].ToString();
Console.WriteLine("foreach Loop Time for {0} elements = {1}", l.Count(), DateTime.Now - start);
Console.WriteLine("\n<===============================================>\n");
Console.WriteLine("List.ForEach(x => x.action) loop test starting...");
start = DateTime.Now;
l.ForEach(x => l[x].ToString());
Console.WriteLine("List.ForEach(x => x.action) Loop Time for {0} elements = {1}", l.Count(), DateTime.Now - start);
Console.WriteLine("\n<===============================================>\n");
Console.WriteLine("for loop test starting...");
start = DateTime.Now;
int count = l.Count();
for (int i = 0; i < count; i++)
{
l[i].ToString();
}
Console.WriteLine("for Loop Time for {0} elements = {1}", l.Count(), DateTime.Now - start);
Console.WriteLine("\n<===============================================>\n");
Console.WriteLine("\n\nPress Enter to continue...");
Console.ReadLine();
}
Не зацикливайтесь на этом слишком сильно. Производительность - это валюта дизайна приложения, но если ваше приложение не испытывает фактического снижения производительности, вызывающего проблемы с удобством использования, сосредоточьтесь на кодировании для удобства обслуживания и повторного использования, поскольку время - это валюта реальных бизнес-проектов ...