By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,456 Members | 1,742 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,456 IT Pros & Developers. It's quick & easy.

iterating through a collection containing different types of numericvalues and adding a specified number to the values.

P: n/a
i have an assignment to iterate through a collection containing
different types of numeric values (float, double, int, byte, short etc.)
and to add 1 to all of them. I tried with array and arraylist so far,
but i either get a cast exception or the value doesn't seem to get
updated at all. What should i be doing to make it work?

Thanks in advance

Anders
Dec 15 '05 #1
Share this Question
Share on Google+
6 Replies


P: n/a
Anders Würtz wrote:
i have an assignment to iterate through a collection containing
different types of numeric values (float, double, int, byte, short etc.)
and to add 1 to all of them. I tried with array and arraylist so far,
but i either get a cast exception or the value doesn't seem to get
updated at all. What should i be doing to make it work?

Thanks in advance

Anders


try this:

ArrayList al = new ArrayList();
al.Add((int)5);
al.Add((double)7.89);
al.Add((short)12);

foreach (object o in al)
{
if (o is int)
o = ((int)o)++;
else if (o is double)
o = ((double)o)++
<...etc...>
}

Hope it helps
MuZZy
Dec 15 '05 #2

P: n/a

Anders Würtz wrote:
i have an assignment to iterate through a collection containing
different types of numeric values (float, double, int, byte, short etc.)
and to add 1 to all of them. I tried with array and arraylist so far,
but i either get a cast exception or the value doesn't seem to get
updated at all. What should i be doing to make it work?

Thanks in advance


There are lots of ways to do this, I'm not sure what they are teaching
you at present. If you *know* each one of them is a value type, you can
just convert them all to a given super-type (like double) and add to
them.
Otherwise, you could do something like this:

ArrayList a = new ArrayList();
int i = 1;
float f = 2.0f;
double d = 3.0;
byte b = 4;
string s = "hello";

// Add some data to the array.
a.Add( i );
a.Add( f );
a.Add( d );
a.Add( b );
a.Add( s );

// Print them out to show
foreach ( object o in a )
Console.Out.WriteLine("value: {0}", o );

// Increment those we can increment.
for ( int o=0; o<a.Count; ++o )
{
// Can't convert non-value types
if ( a[o].GetType().IsValueType )
{
// Make it a double
double d1 = (double)Convert.ChangeType( a[o], d.GetType() );
// Increment it
d1 += 1.0;
// Make it what it was.
object obj = Convert.ChangeType( d1, a[o].GetType() );
// And store it back in the array
a[o] = obj;
}
}

// Print them out to show
foreach ( object o in a )
Console.Out.WriteLine("value: {0}", o );

This isn't pretty and it isn't elegant. But it should get you started.

Matt

Dec 15 '05 #3

P: n/a
Anders Würtz wrote:
i have an assignment to iterate through a collection containing
different types of numeric values (float, double, int, byte, short etc.)
and to add 1 to all of them. I tried with array and arraylist so far,
but i either get a cast exception or the value doesn't seem to get
updated at all. What should i be doing to make it work?

Thanks in advance

Anders

private ArrayList data;

......

this.byteField = 2;
this.shortField = 2;
this.intField = 2;
this.longField = 2;
this.sbyteField = 2;
this.ushortField = 2;
this.uintField = 2;
this.ulongField = 2;
this.floatField = 2;
this.doubleField = 2;
this.decimalField = 2;

data = new ArrayList();
data.Add(this.byteField);
data.Add(this.shortField);
data.Add(this.intField);
data.Add(this.longField);
data.Add(this.sbyteField);
data.Add(this.ushortField);
data.Add(this.uintField);
data.Add(this.ulongField);
data.Add(this.floatField);
data.Add(this.doubleField);
data.Add(this.decimalField);
....

in a method...

....

foreach (object o in data)
{
if (o is byte)
o = ((byte)o)++;
else if (o is double)
o = ((short)o)++;
else if (o is int)
o = ((int)o)++;
else if (o is long)
o = ((long)o)++;
else if (o is sbyte)
o = ((sbyte)o)++;
else if (o is ushort)
o = ((ushort)o)++;
else if (o is uint)
o = ((uint)o)++;
else if (o is ulong)
o = ((ulong)o)++;
else if (o is float)
o = ((float)o)++;
else if (o is double)
o = ((double)o)++;
else if (o is decimal)
o = ((decimal)o)++;
}

compiler errors:

1. cannot assign to 'o' because it is read-only
2. The left-hand side of an assignment must be a variable,
property or indexer

how do i solve this so 1 is added to all the values?

thanks in advance

Anders

Dec 15 '05 #4

P: n/a

Anders Würtz wrote:
Anders Würtz wrote:
i have an assignment to iterate through a collection containing
different types of numeric values (float, double, int, byte, short etc.)
and to add 1 to all of them. I tried with array and arraylist so far,
but i either get a cast exception or the value doesn't seem to get
updated at all. What should i be doing to make it work?

Thanks in advance

Anders

private ArrayList data;

......

this.byteField = 2;
this.shortField = 2;
this.intField = 2;
this.longField = 2;
this.sbyteField = 2;
this.ushortField = 2;
this.uintField = 2;
this.ulongField = 2;
this.floatField = 2;
this.doubleField = 2;
this.decimalField = 2;

data = new ArrayList();
data.Add(this.byteField);
data.Add(this.shortField);
data.Add(this.intField);
data.Add(this.longField);
data.Add(this.sbyteField);
data.Add(this.ushortField);
data.Add(this.uintField);
data.Add(this.ulongField);
data.Add(this.floatField);
data.Add(this.doubleField);
data.Add(this.decimalField);
....

in a method...

....

foreach (object o in data)
{
if (o is byte)
o = ((byte)o)++;


Nope, can't do that. The object itself isn't modifiable.
You'd have to do something like this:

ArrayList data = new ArrayList();
data.Add(byteField);
data.Add(shortField);
data.Add(intField);

for (int i=0; i<data.Count; ++i )
{
object o = data[i];
if (o is byte)
{
byte b = (byte)o;
b++;
data[i] = b;
}
}
Matt

Dec 15 '05 #5

P: n/a
MuZZy wrote:
Anders Würtz wrote:
i have an assignment to iterate through a collection containing
different types of numeric values (float, double, int, byte, short etc.)
and to add 1 to all of them. I tried with array and arraylist so far,
but i either get a cast exception or the value doesn't seem to get
updated at all. What should i be doing to make it work?
Thanks in advance

Anders

try this:

ArrayList al = new ArrayList();
al.Add((int)5);
al.Add((double)7.89);
al.Add((short)12);

foreach (object o in al)
{
if (o is int)
o = ((int)o)++;
else if (o is double)
o = ((double)o)++
<...etc...>
}

Hope it helps
MuZZy


private ArrayList data;

......

this.byteField = 2;
this.shortField = 2;
this.intField = 2;
this.longField = 2;
this.sbyteField = 2;
this.ushortField = 2;
this.uintField = 2;
this.ulongField = 2;
this.floatField = 2;
this.doubleField = 2;
this.decimalField = 2;

data = new ArrayList();
data.Add(this.byteField);
data.Add(this.shortField);
data.Add(this.intField);
data.Add(this.longField);
data.Add(this.sbyteField);
data.Add(this.ushortField);
data.Add(this.uintField);
data.Add(this.ulongField);
data.Add(this.floatField);
data.Add(this.doubleField);
data.Add(this.decimalField);
....

in a method...

....

foreach (object o in data)
{
if (o is byte)
o = ((byte)o)++;
else if (o is double)
o = ((short)o)++;
else if (o is int)
o = ((int)o)++;
else if (o is long)
o = ((long)o)++;
else if (o is sbyte)
o = ((sbyte)o)++;
else if (o is ushort)
o = ((ushort)o)++;
else if (o is uint)
o = ((uint)o)++;
else if (o is ulong)
o = ((ulong)o)++;
else if (o is float)
o = ((float)o)++;
else if (o is double)
o = ((double)o)++;
else if (o is decimal)
o = ((decimal)o)++;
}

compiler errors:

1. cannot assign to 'o' because it is read-only
2. The left-hand side of an assignment must be a
variable, property or indexer

how do i solve this so 1 is added to all the values?

thanks in advance

Anders
Dec 15 '05 #6

P: n/a
foreach is a readonly implementation you cannot change the object.
Just use for loop it will work fine

Saurabh
"Matt" <ma********@sprynet.com> wrote in message
news:11**********************@o13g2000cwo.googlegr oups.com...

Anders Würtz wrote:
Anders Würtz wrote:
i have an assignment to iterate through a collection containing
different types of numeric values (float, double, int, byte, short etc.)
and to add 1 to all of them. I tried with array and arraylist so far,
but i either get a cast exception or the value doesn't seem to get
updated at all. What should i be doing to make it work?

Thanks in advance

Anders

private ArrayList data;

......

this.byteField = 2;
this.shortField = 2;
this.intField = 2;
this.longField = 2;
this.sbyteField = 2;
this.ushortField = 2;
this.uintField = 2;
this.ulongField = 2;
this.floatField = 2;
this.doubleField = 2;
this.decimalField = 2;

data = new ArrayList();
data.Add(this.byteField);
data.Add(this.shortField);
data.Add(this.intField);
data.Add(this.longField);
data.Add(this.sbyteField);
data.Add(this.ushortField);
data.Add(this.uintField);
data.Add(this.ulongField);
data.Add(this.floatField);
data.Add(this.doubleField);
data.Add(this.decimalField);
....

in a method...

....

foreach (object o in data)
{
if (o is byte)
o = ((byte)o)++;


Nope, can't do that. The object itself isn't modifiable.
You'd have to do something like this:

ArrayList data = new ArrayList();
data.Add(byteField);
data.Add(shortField);
data.Add(intField);

for (int i=0; i<data.Count; ++i )
{
object o = data[i];
if (o is byte)
{
byte b = (byte)o;
b++;
data[i] = b;
}
}
Matt
Dec 27 '05 #7

This discussion thread is closed

Replies have been disabled for this discussion.