i trying add lap times first must check if there value in textbox , proceed. how do this? lap time recorded this: 01:29:30
here code:
try { timespan diff1 = timespan.parse(lap1timetextbox.text); timespan diff2 = timespan.parse(lap2timetextbox.text); timespan diff3 = timespan.parse(lap3timetextbox.text); timespan diff4 = timespan.parse(lap4imetextbox.text); timespan diff5 = timespan.parse(lap5timetextbox.text); timespan diff6 = timespan.parse(lap6timetextbox.text); timespan diff7 = timespan.parse(lap7timetextbox.text); timespan diff8 = timespan.parse(lap8timetextbox.text); timespan diff9 = timespan.parse(lap9timetextbox.text); timespan diff10 = timespan.parse(lap10timetextbox.text); timespan total = diff1 + diff2 + diff3 + diff4 + diff5 + diff6 + diff7 + diff8 + diff9 + diff10; fulltimetextbox.text = total.tostring(); } catch (exception ex) { messagebox.show(ex.tostring()); }
you use following approach using timespan.tryparse , timespan[]:
timespan[] laps = new timespan[10]; bool valid = timespan.tryparse(lap1timetextbox.text, out laps[0]); valid = timespan.tryparse(lap2timetextbox.text, out laps[1]); // ... valid = timespan.tryparse(lap10timetextbox.text, out laps[9]); timespan totallaps = timespan.zero; foreach (timespan lap in laps) totallaps = totallaps + lap; that works since timespan struct , cannot null. in array initialized timespan.zero. non-parsable timespans count zero.
i have tested sample values in format.
if have plenty of such controls might tedious repeat timespan.tryparse(lap1timetextbox.text, out laps[0]) every control if easy, readable , testable code.
if textboxes in same container-control (like panel or form) use folllowing linq approach:
timespan sumofalllaptimes = laptimepanel.controls.oftype<textbox>() .where(txt => txt.name.startswith("lap", stringcomparison.invariantcultureignorecase)) .select(txt => txt.text.trygettimespan()) .where(ts => ts.hasvalue) .select(ts => ts.value) .sum(); this query uses following 2 handy extension methods:
public static timespan? trygettimespan(this string timespan, iformatprovider formatprovider = null) { if (timespan == null) throw new argumentnullexception("timespan"); timespan ts; bool success = timespan.tryparse(timespan, formatprovider, out ts); if (success) return ts; return null; } public static timespan sum(this ienumerable<timespan> timespans) { timespan sum = timespan.zero; foreach (timespan ts in timespans) sum = sum + ts; return sum; }
Comments
Post a Comment