achraf boumessouer Ответов: 3

Пытаюсь найти источник ошибки в моем коде


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

namespace ClassLibrary3
{
    public class Destination
    {

        public string DestinationName; // Nom de l'opérateur

        public List<int> PrefixCall; // Les codes de l'opérateurs +216 9 216 7

        public int MinDigit; // Nombre minimum des chiffres

        public int MaxDigit;

        public string DestinationType; // Termination, VAS, MSRN Roaming

        public  List<Trunk> Trunks;


        public bool ExistPrefixCall(int code)
        {
            if (PrefixCall.Exists(code))//i have problem here
                return true;
            return false;
        }


        public bool addPrefixCall(int code)
        {
            if (PrefixCall.Exists(code))//i have problem here
                return false;
            else
            {

                PrefixCall.Add(code);
                return true;
                    
            }
        }






    }
}


Что я уже пробовал:

prefixcall является список целых чисел, я не знаю, почему он дает ошибку, когда я использую существует собственность

Maciej Los

Что ж... Если член PrefixCall-это список целых чисел, как бы вы хотели передать в него [ + ]?

3 Ответов

Рейтинг:
1

Gerry Schmitz

Ваш "список" должен быть "инициализирован"; например

public List<int> PrefixCall = new List<int>(); // Les codes de l'opérateurs +216 9 216 7


.. в противном случае он будет просто "нулевым".


BillWoodruff

+5

Рейтинг:
0

Wendelius

Метод Exists используется, когда вы определяете свой собственный предикат, чтобы проверить, существует ли элемент или нет. Таким образом, метод ожидает, что вы предоставите предикат, а не просто число.

Судя по опубликованному вами коду, вы просто хотите узнать, есть ли номер в списке или нет. Для этого попробуйте использовать List<t>.содержит метод(T) [^]


Рейтинг:
0

BillWoodruff

Немного подробнее о решении Джерри Шмитца:

Что вам нужно сделать, так это проверить 'PrefixCall для null и/или проверить 'PrefixCall для отсутствия записей.

Мне нравится справляться с подобными задачами, используя преимущества nullable bool:

public bool? ValidatePrefixCall()
{
    if(PreFixCall == null) return null;

    return PreFixCall.Count > 0;
}

public bool ThrowOnNullList = true;

// use example
bool? pfcIsValid = ValidatePrefixCall();

if (pfcIsValid == true)
{
    // the list is initialized and has at least one item
}
else
{
    if (pfcIsValid == false)
    {
        // the list is initialized and has no items    
    }
    else
    {
        // the list is not initialized
        if (ThrowOnNullList)
        {
            throw new NullReferenceException("PreFixCall is null");
        }
    }
}


0x01AA

Для удобства чтения я предпочитаю
if (pfcIsValid.Свойство hasvalue)
...

BillWoodruff

'Свойство hasvalue возвращает значение false, когда на велоэтапе, допускающий значение null не присваивается значение, и, когда значение обнуляемого типа было установлено в нуль. Подумайте об этом.

0x01AA

Да именно и это делает его таким понятным для чтения ;)

BillWoodruff

Я думаю, что вы упускаете здесь главное: мой пример кода дает три возможных состояния информации о списке. Использование 'HasValue объединяет два состояния.

0x01AA

Я имею в виду вот что:
if (pfcIsValid.Свойство hasvalue)
{
if (pfcIsValid)
{
// список инициализируется и содержит по крайней мере один элемент
}
еще
{
// список инициализирован и не содержит элементов
}
}
еще если (ThrowOnNullList)
{
throw new NullReferenceException("PreFixCall is null");
}

Она эквивалентна вашей логике, но с моей точки зрения более читабельна.

BillWoodruff

Привет, я ценю твою страсть к читабельности. Сейчас час ночи, и мне нужно на время отключить мозг :) Подумаю об этом завтра, ура, Билл

0x01AA

Спите спокойно :)
Кстати, намерения теряются в моем фрагменте кода выше.

BillWoodruff

Извините, но даже после хорошего ночного сна этот код не имеет для меня никакого смысла. "if (pfcIsValid)" ... если вы используете nullable bool, вы не можете напрямую получить доступ к логическому состоянию, как это: он даже не будет компилироваться;вы получите эту ошибку:

Ошибка CS026 не может неявно преобразовать тип 'bool?' в 'bool'.