Я не могу установить формат своих ссылочных номеров на «байт» или «короткий» в консольном проекте? - PullRequest
0 голосов
/ 23 ноября 2018

На самом деле это мой первый вопрос на этом сайте, и я надеюсь, что это правильный способ задать этот тип вопроса.

Я просто изучаю C # с нуля в Youtube.

Я создал простойКонсольный проект, который имеет функцию умножения, как вы можете видеть ниже, но я не могу установить свои ссылочные номера (номер1, номер2) на «короткий» или «байт».Но я могу установить для них «long», «decimal», «int» и т. Д.

Я провел небольшой поиск, и у меня есть теория, что речь идет о количестве битов и байтов каждого параметра, но я не могу понять концепцию.

Кто-нибудь может объяснить эту ошибку, с которой я сталкиваюсь простым языком?Спасибо за любое объяснение:)

using System;

namespace HelloWorld
{
class Program
{
    static void Main(string[] args)
    {
        try
        {
            Start:
            int number1;
            int number2;

            Console.Write("enter number to multiply:");
            number1 = Convert.ToInt32(Console.ReadLine());
            Console.Write("enter another number:");
            number2 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("the result is:" + number1 * number2 + "(" + number1 + "X" + number2 + ")");
            Console.WriteLine();
            goto Start;
        }
        catch (Exception)
        {
            Console.WriteLine("hey silly! that's not even a number:)");
        }
    }
}

}

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

если я понимаю вашу проблему - для того, чтобы "установить" переменную определенного типа, вам нужно объявить ее как таковую перед компиляцией (перед запуском программы).

Так что если вы хотите работатьс длинными числами вам нужно объявить:

long number1;
long number2;

Ваши преобразования должны отражать это:

number1 = Convert.ToInt64(Console.ReadLine());

Для десятичных

decimal number1;
decimal number2;

Преобразование, например, decimal.parse (number1).

Для байта

byte number1;
byte number2;

Опять ваше преобразование должно выполняться для каждого типа.

Просто примечание.Использование goto - это то, что я не одобряю и не предлагаю.Научитесь использовать петлю.Если эти видео используют goto, я бы посоветовал узнать из лучшего источника.

Надеюсь, это поможет.

0 голосов
/ 23 ноября 2018

Вы на правильном пути;речь идет о неявном преобразовании типов и строгой типизации.

Чтобы не перегружать вас всеми деталями, вы можете внести некоторые изменения в

short:

обратите внимание наToInt16

short number1;
//etc
number1 = Convert.ToInt16(Console.ReadLine());

байт:

Примечание: ToByte

byte number1;
//etc
number1 = Convert.ToByte(Console.ReadLine());

длинный

оставлено в качестве упражнения


Важно то, что, хотя все типы состоят из битов и в основном являются числами, C # хочет быть уверенным, что вы имеете в виду то, что говорите, и применяетвы должны использовать правильные type.


Итак, почему это работает для decimal и т. д.?

Это потому, что C # считает, что неявно преобразует их, и поэтому компилятор сделает это за вас.

В ссылке вы можете видеть, что для int (он же Int32) предопределены следующие неявные преобразования:

//from  |  to
//int   |  long, float, double, or decimal

В связанной таблице вы также можете видеть, что другиедопускается обратный путь, от byte до int.


Большой урок: C # строго типизирован: если вы говорите, что это Int16 (он же короткий), вы должны использовать его только какInt16 (а не Int32)

Счастливого кодирования; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...