Я получал строки с датами, такие как hhmmss
, которые пересекали последовательную линию от моего Arduino.
, так что предположим, что я получил s = "122041"
; это 12:20:41
, однако 9am
будет 090000
.
Оператор print "%d" % (s)
вызывает ошибку времени выполнения, потому что 9 не является восьмеричным числом и, следовательно, является незаконным символом.
Чтобы устранить эту проблему:
print "%06d" % (int(s))
Надеюсь, что помогает
В то время как можно использовать ForEach
дополнительный метод, если Вы хотите использовать просто платформу, можно сделать
collection.Select(c => {c.PropertyToSet = value; return c;}).ToList();
Эти ToList
, необходим для оценки выбора сразу из-за отложенные вычисления .
Я предполагаю, что Вы хотите изменить значения в запросе, таким образом, Вы могли записать функцию для него
void DoStuff()
{
Func<string, Foo, bool> test = (y, x) => { x.Bar = y; return true; };
List<Foo> mylist = new List<Foo>();
var v = from x in mylist
where test("value", x)
select x;
}
class Foo
{
string Bar { get; set; }
}
, Но не Shure, если это - то, что Вы имеете в виду.
Мои 2 pennies:-
collection.Count(v => (v.PropertyToUpdate = newValue) == null);
Можно использовать LINQ, чтобы преобразовать набор в массив и затем вызвать Array. ForEach ():
Array.ForEach(MyCollection.ToArray(), item=>item.DoSomeStuff());
, Очевидно, это не будет работать с наборами структур или встроенных типов как целые числа или строки.
Нет, LINQ не поддерживает способ массового обновления. Только короче путь состоял бы в том, чтобы использовать ForEach
дополнительный метод - , Почему нет никакого метода расширения ForEach на IEnumerable?
Я на самом деле нашел дополнительный метод , который сделает то, что я хочу приятно
public static IEnumerable<T> ForEach<T>(
this IEnumerable<T> source,
Action<T> act)
{
foreach (T element in source) act(element);
return source;
}
Нет никакого встроенного дополнительного метода, чтобы сделать это. Хотя определяя каждый является довольно прямым. В нижней части сообщения метод, который я определил названный, Выполняют итерации. Это может использоваться как так
collection.Iterate(c => { c.PropertyToSet = value;} );
, Выполняют итерации Источника
public static void Iterate<T>(this IEnumerable<T> enumerable, Action<T> callback)
{
if (enumerable == null)
{
throw new ArgumentNullException("enumerable");
}
IterateHelper(enumerable, (x, i) => callback(x));
}
public static void Iterate<T>(this IEnumerable<T> enumerable, Action<T,int> callback)
{
if (enumerable == null)
{
throw new ArgumentNullException("enumerable");
}
IterateHelper(enumerable, callback);
}
private static void IterateHelper<T>(this IEnumerable<T> enumerable, Action<T,int> callback)
{
int count = 0;
foreach (var cur in enumerable)
{
callback(cur, count);
count++;
}
}
Вы можете использовать Magiq , платформу пакетных операций для LINQ.
Вот метод расширения, который я использую ...
/// <summary>
/// Executes an Update statement block on all elements in an IEnumerable of T
/// sequence.
/// </summary>
/// <typeparam name="TSource">The source element type.</typeparam>
/// <param name="source">The source sequence.</param>
/// <param name="action">The action method to execute for each element.</param>
/// <returns>The number of records affected.</returns>
public static int Update<TSource>(this IEnumerable<TSource> source, Func<TSource> action)
{
if (source == null) throw new ArgumentNullException("source");
if (action == null) throw new ArgumentNullException("action");
if (typeof (TSource).IsValueType)
throw new NotSupportedException("value type elements are not supported by update.");
var count = 0;
foreach (var element in source)
{
action(element);
count++;
}
return count;
}
Я пробовал несколько вариантов этого и продолжаю возвращаться к решению этого парня.
http://www.hookedonlinq.com/UpdateOperator.ashx
Опять же, это чужое решение. Но я скомпилировал код в небольшую библиотеку и довольно регулярно использую ее.
Я собираюсь вставить сюда его код на случай, если его сайт (блог) перестанет существовать в какой-то момент в будущем. (Нет ничего хуже, чем увидеть сообщение «Вот точный ответ, который тебе нужен», «Нажмите» и «Мертвый URL».)
public static class UpdateExtensions {
public delegate void Func<TArg0>(TArg0 element);
/// <summary>
/// Executes an Update statement block on all elements in an IEnumerable<T> sequence.
/// </summary>
/// <typeparam name="TSource">The source element type.</typeparam>
/// <param name="source">The source sequence.</param>
/// <param name="update">The update statement to execute for each element.</param>
/// <returns>The numer of records affected.</returns>
public static int Update<TSource>(this IEnumerable<TSource> source, Func<TSource> update)
{
if (source == null) throw new ArgumentNullException("source");
if (update == null) throw new ArgumentNullException("update");
if (typeof(TSource).IsValueType)
throw new NotSupportedException("value type elements are not supported by update.");
int count = 0;
foreach (TSource element in source)
{
update(element);
count++;
}
return count;
}
}
int count = drawingObjects
.Where(d => d.IsSelected && d.Color == Colors.Blue)
.Update(e => { e.Color = Color.Red; e.Selected = false; } );