Массив C #.Ошибка компиляции Contains ()

#c# #.net #linq

#c# #.net #linq

Вопрос:

Я пытаюсь использовать массив.Содержит метод () в C #, и по какой-то причине ему не удается скомпилироваться, хотя я считаю, что использую C # 4.0, и C # должен поддерживать это в версии 3.0 и более поздних версиях.

 if (! args.Contains ("-m"))
    Console.WriteLine ("You must provide a message for this commit.");
  

И я получаю эту ошибку:

Main.cs(42,15): ошибка CS1061: ‘Система.Массив ‘не содержит определения для ‘Contains’, и ни один метод расширения ‘Не содержит’ принимающий первый аргумент типа ‘System.Удалось найти массив’ (вам не хватает директивы using или ссылки на сборку?)

Я выполняю компиляцию из командной строки без параметров: «csc Main.exe «.

Комментарии:

1. Прочитайте сообщение об ошибке. Это говорит вам, что не так. Вам не хватает либо ссылки на сборку, либо директивы using .

Ответ №1:

Вам нужно добавить using System.Linq; в начале вашей программы.

Ответ №2:

Ты забыл using System.Linq ?

Кстати, если вы не можете использовать LINQ, есть много других вариантов, таких как Array.Exists .

Комментарии:

1. Или Array.Contains , который делает то же самое, что и он хочет. Но он, очевидно, использует C # 3.5, поэтому нет причин, по которым он не мог бы использовать Linq.

Ответ №3:

Если вы не хотите использовать linq, попробуйте

 ((IList<string>)args).Contains("-m")
  

Ответ №4:

В ответах говорится, что нужно включить System.Linq исправен, однако есть еще одна причина этой проблемы. Если тип аргумента для .Contains() не соответствует типу массива, вы получите эту ошибку.

 public class Product
{
    public long ProductID {get;set;}
}

public IEnumerable<Product> GetProductsByID(int[] prodIDs)
{
    using (var context = new MyDatabaseContext())
    {
        return context.Products.Where(product => prodIDs.Contains(product.ProductID)); // ['System.Array' does not contain a definition for 'Contains'] error because product.ProductID is long and prodIDs is an array of ints.
    }
}
  

Комментарии:

1. Это была именно та проблема, с которой я столкнулся. Я продолжал просматривать этот оператор using в поисках опечаток. Сбивает с толку!

Ответ №5:

У меня была та же проблема, и у меня

 using System.Linq
  

Это было потому, что я пытался сравнить string с int, но почему-то он говорил

‘Система.Массив’ не содержит определения для ‘Содержит’

Ответ №6:

Убедитесь, что вы используете правильную версию CSC (csc /?) — вам нужна версия 2010 для компиляции 4.0. Вам также может потребоваться добавить дополнительные библиотеки (опция /r) для успешной компиляции.