System.Array does not contain a definition for 

2020-04-21 02:56发布

Using Visual Basic // C#

I'm trying to search through my stored arrays for a match to the user input. For example, the user has stored the data for a USB, and now wishes to bring that information back up.

FULL CODE BELOW

I'm already using IndexOf to find the array index, but now i want to search that index for a match to the user's input. This line of code:

if (ProductNameArray.Any(usersearch.Contains))

has come up with the error that

System.Array does not contain a definition for 'Any'

but it has worked in other code for me.

I cannot seem to figure this out, any help is appreciated.

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using System.Linq;

namespace Prac_Test3
{


class Program
{
     // Constants
        const int SIZE_OF_PRODUCT_CODE = 4;
        const float CATEGORY_A_MARKUP = 10.0F;
        const float CATEGORY_C_MARKUP = 33.3F;
        const float CATEGORY_P_MARKUP = 15.0F;
        const int ARRAY_SIZE = 100;


    static void DisplayMenu()
    {
        Console.Clear();
        Console.WriteLine("--------------> Menu <------------");
        Console.WriteLine("1. Add a product                (a)");
        Console.WriteLine("2. Find a product               (f)");
        Console.WriteLine("3. Enter the quantity in stock  (q)");
        Console.WriteLine("4. Delete a product             (d)");
        Console.WriteLine("5. Calculate and display values (v)");
        Console.WriteLine("6. Exit                         (x)");
        Console.Write("\r\nEnter your selection: ");
    }
    static void AddProduct( string[] ProductNameArray, string[] ProductCodeArray, float[] WholesalePriceArray, ref int NextAvaliablePosition)
    {
        string ProductName = "";
        string ProductCode = "";
        string ProductCategory = "";

        float WholesalePricePerItem = 0.0F;

        bool ParseResult = false;
        bool ErrorFlag = false;

        string UserResponse = ""; 

        do
        {
            ErrorFlag = false;
            Console.Write("Product Name                : ");
            ProductName = Console.ReadLine();
            if (ProductName == "")
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Product Name must not be left blank.");
                Console.ForegroundColor = ConsoleColor.Gray;
                ErrorFlag = true;
            }
        } while (ErrorFlag);

        do
        {
            ErrorFlag = false;
            Console.Write("Product Code                : ");
            ProductCode = Console.ReadLine();
            if (ProductCode == "")
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Product Name must not be left blank.");
                Console.ForegroundColor = ConsoleColor.Gray;
                ErrorFlag = true;
            }
            else if (ProductCode.Length != SIZE_OF_PRODUCT_CODE)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Product Code must be exactly four characters.");
                Console.ForegroundColor = ConsoleColor.Gray;
                ErrorFlag = true;
            }
            else
            {
                ProductCategory = ProductCode.Substring(0, 1);
                ProductCategory = ProductCategory.ToUpper();
                if (ProductCategory != "A" && ProductCategory != "C" && ProductCategory != "P")
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Product Code must start with A, C or P.");
                    Console.ForegroundColor = ConsoleColor.Gray;
                    ErrorFlag = true;
                }
                else if (!(Char.IsDigit(ProductCode[1])) && !(Char.IsDigit(ProductCode[2])) && !(Char.IsDigit(ProductCode[3])))
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Product Code  must be A, C or P followed by three digits.");
                    Console.ForegroundColor = ConsoleColor.Gray;
                    ErrorFlag = true;
                }
            }
        } while (ErrorFlag);

        do
        {
            ErrorFlag = false;
            Console.Write("Wholesale price per item ($): ");
            UserResponse = Console.ReadLine();
            ParseResult = float.TryParse(UserResponse, out WholesalePricePerItem);
            if (ParseResult == false)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Not a valid number.");
                Console.ForegroundColor = ConsoleColor.Gray;
                ErrorFlag = true;
            }
            else if (WholesalePricePerItem <= 0)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Wholesale price must be a number greater than 0.");
                Console.ForegroundColor = ConsoleColor.Gray;
                ErrorFlag = true;
            }
        } while (ErrorFlag);
    }
    static void FindProduct(Array ProductNameArray)
    {

        int search = -1;
        string usersearch;

        usersearch = Console.ReadLine();
        search = Array.IndexOf(ProductNameArray, usersearch);

        if (search >=0)
        {
            if (ProductNameArray.Any(usersearch.Contains))
            {
                Console.WriteLine(" details blah blah");
            }
        }
        else if (search <0)
        {
            Console.WriteLine("No record exists.");
        }    

标签: c# arrays search
3条回答
仙女界的扛把子
2楼-- · 2020-04-21 03:04

Add below to you code

using System.Linq;
查看更多
我只想做你的唯一
3楼-- · 2020-04-21 03:06

You need using System.Linq; for that to work.

Any is an extension method defined in LINQ.

Also, pay attention to the type of ProductNameArray. If it is defined as Array (and not string[], for example), the compiler has no way of inferring that, when enumerated, it'll yield strings.

In that case, you'd have to write:

if (ProductNameArray.Cast<string>().Any(usersearch.Contains))

Edit: OK, looking at the code it seems that the problem is the one described above.

You'll have to change the signature of the FindProduct method from

static void FindProduct(Array ProductNameArray)

to

static void FindProduct(string[] ProductNameArray)

or use the .Cast<string> method.

I'd personally prefer changing the method's signature, since the ProductNameArray passed to it seems to really be a string[].

查看更多
▲ chillily
4楼-- · 2020-04-21 03:14

Any() is an extension method in System.Linq namespace. You have to add using System.Linq; so that you can use it.

namespace Your.Namespace
{
    using System;
    using ... // your other usings
    using System.Linq;

    public sealed class YourClass
    {
        public void Test()
        {
            // ...
            yourArray.Any()
        }
    }
}
查看更多
登录 后发表回答