Nathan
Nathan

Reputation: 1347

Operator cannot be applied to operands of type 'Method Group' and 'int'

I'm trying to get the number of elements in this string array, but it won't let me take 1 away from Count.

string [] Quantitys = Program.RecieptList[i].ItemQuantitys.Split(new char[] {'*'});
for (int ii = 0; i <= Quantitys.Count - 1; ii++)
{

}

I get an error message stating

Operator '-' cannot be applied to operands of type 'Method Group' and 'Int'.

Whats the proper way to do this?

Upvotes: 17

Views: 54570

Answers (4)

BOR15K
BOR15K

Reputation: 468

Simply add brackets (). Instead of Quantitys.Count, use

Quantitys.Count()

Upvotes: 23

Ziad Adnan
Ziad Adnan

Reputation: 822

for me I added List then its working

before :

@model warehouse.Models.DEPARTMENTS

after

@model List<warehouse.Models.DEPARTMENTS>`

then the for loop :

  @for (int i = 0; i < Model.Count(); i++)
        {
            <tr>
            </tr>
        }

Upvotes: 0

valverij
valverij

Reputation: 4951

It should be Length not Count for arrays:

string [] Quantitys = Program.RecieptList[i].ItemQuantitys.Split(new char[] {'*'});
for (int ii = 0; i <= Quantitys.Length - 1; ii++)
{

}

More information on the MSDN: Array.Length

Also, unless it was intentional, your ii should just be i in your for loop:

for (int i = 0; i <= Quantitys.Length - 1; i++)

Although, as was pointed out in the comments below, you could also use the Quantitys.Count(), since arrays inherit from IEnumerable<T>. Personally, though, for one-dimensional arrays, I prefer to use the standard Array.Length property.

Upvotes: 19

Tim S.
Tim S.

Reputation: 56586

Arrays have a Length property, not a Count property, though they do the same thing. The error you're seeing is because there's an extension method Count() that it's finding instead, but can't quite use because you didn't invoke it with (). You could use your array as an IList<T> instead so that you can keep the familiar Count property name.

Also, i and ii will be confusing to most people (including yourself, from the looks of it: you included both in your for line). The standard in programming, carried over from mathematics, is i, j, k, ... for index variable names. This will work:

IList<string> Quantitys = Program.RecieptList[i].ItemQuantitys.Split(new char[] {'*'});
for (int j = 0; j <= Quantitys.Count - 1; j++)
{

}

Upvotes: 5

Related Questions