Helin1 Ответов: 1

Можете ли вы заметить разницу?


Поэтому я практикую создание небольших приложений Windows Forms и у меня возникла проблема с методом, который предполагается использовать для получения входных данных от пользователя. Я сделал подобный проект некоторое время назад, и он работает просто отлично. Код ошибки гласит: Не вызываемый член "Task" не может быть использован в качестве метода. Обратите внимание, что тот, который дает мне ошибку, возвращает DateTime.





Ошибка первая:


private Task GetTaskFromUserInputs (out bool success)
            {
                success = false;

                Task newTask = new Task(); 


                newTask.Description = ReadDescription(out success);
            
                if (!success)
                    return null;

                newTask.DateTime = ReadDate(out success);
                if (!success)
                    return null;

                newTask.Priority = ReadPriority(out success);
                    return null;
            }





работает просто отлично один:





private ShoppingItem ReadInput (out bool success)
        {
            success = false;

            ShoppingItem item = new ShoppingItem();

            item.Description = ReadDescription(out success);
            if (!success)
                return null;

            item.Amount = ReadAmount(out success);
            if (!success)
                return null;

            item.Unit = ReadUnit(out success);
                return item;


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

Только начал учиться кодировать так что я не знаю как справиться с этой ошибкой






using System.Text;
using System.Threading.Tasks;

namespace FriendlyReminder
{
    class Task
    {
        DateTime date;
        private string description;
        PriorityType priority;

        public string Description
        {
            get { return description; }
            set { description = value; }
        }

        public string DateTime;

        public PriorityType Priority
        {
            get { return priority; }
            set { priority = value; }
        }

        public DateTime Date
        {
            get { return date; }
            set { date = value; }
        }

        public Task (DateTime date, PriorityType priority, string description)
        {
            this.date = date;
            this.priority = priority;
            this.description = description;
        }






        public string GetPriorityString()
        {
            return string.Empty;

        }

        public string GetTimeString()
        {
             return date.ToShortDateString();
        }

        

        public string ToString()
        {
            return $"{date.ToShortDateString(),-12}" +
                   $"{GetTimeString(),-7}" +
                   $"{GetPriorityString(),-16}" +
                   $"{description}";


        }

    }
}

1 Ответов

Рейтинг:
4

phil.o

Почему игнорирование успеха для последнего шага?

Можно попробовать либо

newTask.Priority = ReadPriority(out success);
return newTask; // ignoring success status
или
newTask.Priority = ReadPriority(out success);
if (!success)
   return null;
return newTask; // returning the Task instance only on success


Helin1

@phil.o Спасибо, я этого не заметил. Есть какая-нибудь подсказка, почему я не могу использовать Task newTask = new Task(); в первом фрагменте? Код ошибки гласит: Не вызываемый член "Task" не может быть использован в качестве метода.

phil.o

Я не знаю. Система.Нарезание резьбы.Задачи.Класс задач не имеет никакого пустого конструктора (конструктор без каких-либо аргументов). Но тогда вы не получите сообщение об ошибке, которое вы на самом деле получаете (это скорее будет что-то вроде "ни один конструктор, принимающий нулевой аргумент, не определен").
Какой именно класс задач вы используете? Вы сами его создали? Если да, то не могли бы вы воспользоваться зеленой кнопкой "улучшить вопрос" и дать определение этого класса?
Edit: сообщение об ошибке предполагает, что Task скорее будет свойством, но тогда вы получите ошибку компиляции, так как класс Task будет казаться несуществующим. Все это не имеет никакого смысла.

Helin1

Должно быть обновлено сейчас. Да, я действительно не могу сказать, так как я только начинаю изучать dos и donts c# и программирования в целом. Очень благодарен за помощь!

phil.o

Пожалуйста. Вы можете попробовать две вещи: во-первых, явно объявить класс задачи как открытый. Второе: дать ему конструктор без параметров, который присваивает значения по умолчанию для даты, приоритета и описания; или использовать в вызывающем коде существующий конструктор (тот, что с параметрами).
Редактировать: как уже существует Task класс в центре города System.Threading.Tasks пространство имен, вы должны дать своему собственному классу другое имя; или, если вы хотите сохранить это имя, то используйте полное имя (FriendlyReminder.Task) в каждом файле, где System.Threading.Tasks пространство имен было импортировано.

Helin1

Спасибо Вам за помощь, мне пришлось создать еще один конструктор

государственное задание() : базовый()
{
}

и это все решило :)

phil.o

Пожалуйста :)

Helin1

Не уверен, что я правильно понял, должен ли я попытаться вызвать метод в классе задач? Потому что проект требует, чтобы mainform был единственным классом, который взаимодействует с графическим интерфейсом. Или, может быть, у вас есть пример кода?

phil.o

Нет, вы должны либо создать конструктор без параметров в классе задач, чтобы ваш существующий код нашел этот конструктор. Или измените строку Task newTask = new Task(); к Task newTask = new Task(DateTime.MinValue, PriorityType.NotUrgent, "Default task"); (например) так, что он вызывает уже существующий конструктор.

BillWoodruff

+5