Member 12869977 Ответов: 3

C# как реализовать функцию в этом коде?


Я должен реализовать функцию, которая может принимать строковый параметр и возвращать переменную типа bool. Затем функция должна проверить, является ли указанный отправленный параметр целочисленным, и вернуть true, если это так, или false, если это не так. Не могли бы вы помочь? я новичок в C# и пытаюсь учиться самостоятельно. Спасибо.

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

class Program
    {

        static void Main(string[] args)
        {
            string[] values = { "10x", "10", "100xx" };
            foreach (var value in values)
            {
                int g;
                if (int.TryParse(value, out g))
                    Console.WriteLine("Value '{0}' is a number.", value, g);
                else
                    Console.WriteLine("Value '{0}' is not a number.", value == null ? "<null>" : value);
            }
            
        }
    }

Philippe Mori

В Visual Studio вы можете выбрать некоторый код и щелкнуть правой кнопкой мыши, и появится возможность создать функцию.

В противном случае вам лучше прочитать несколько книг или учебников и попробовать то, что вы изучаете...

Philippe Mori

Это задание или что-то, что вы хотите сделать сами. Если это задание, то checkString из решения 2 будет то, что вы просите.

А если это ваш собственный код, то в таком случае его не имеет смысла заменять int.TryParse чем-то другим, поскольку он уже делает именно то, что вам нужно.

Member 12869977

Это своего рода задание. Я делаю лист упражнений из книги, которую изучал, и то, что меня просили сделать в упражнении. Я знаю, что мой код работает без функции, но мне это нужно, потому что в нем говорится о создании функции, которая будет вызываться из Основная и вторая части упражнения говорят об изменении функции для получения другого строкового параметра, в котором я буду отправлять тип параметра, который я хочу проверить: число или данные. Функция должна быть изменена таким образом, чтобы учесть этот новый параметр. Если параметр - это число, мы отобразим это число, если это данные, мы скажем, что это данные ... так что причина ... извините за плохой английский, это мой второй язык ... до сих пор не понял вторая часть, так что если у вас есть какие-то идеи, не стесняйтесь дать мне их .. и спасибо

3 Ответов

Рейтинг:
27

Sossi.Mond

Пример того, как вы могли бы сделать это с помощью
"метод tryparse ".
Код может быть еще меньше, если удалить этот метод
"checkString(строка str) "
и заменив его в операторе if на
а метод tryparse.

static void Main(string[] args)
{
	string[] strArray = {"100k", "10", "10k" };
	string strPlaceholder;

	Console.WriteLine("\n ~~ Press F12 to quit ~~\n");

	do
	{
		foreach (string str in strArray)
		{
			strPlaceholder = null;

			if (!checkString(str))
			    strPlaceholder = "not";

			Console.WriteLine($"# {str} is {strPlaceholder} a valid Number");
		}

	} while (Console.ReadKey(true).Key != ConsoleKey.F12);
			
}

static bool checkString(string str)
{
	int placeholder;

	return int.TryParse(str, out placeholder);
}


Member 12869977

я немного изменил его, но он работал ! спасибо

Sossi.Mond

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

Рейтинг:
1

23741

A simplifield way like this should do. 

(you should test it if a string containing a real/float/double stringified value is passed in such as "3.14159" etc... (you could use the string contains method and check for decimal being present in the string (except the last position on the right).


static bool IsThisAnInteger( string input = "" ){
  int g = 0;
  try {
    Int.Parse(input,out g);   // the Parse method will throw an error if not int.
    return true;
  } catch( Exception x){
    ;  // you'll end up here if input is not a stringified int.
  }
  return false;
}


F-ES Sitecore

Никогда не используйте для этого исключения, исключения очень дороги, поэтому существует метод TryParse. Используйте Parse только в том случае, если вы знаете, что входные данные имеют правильный формат и не вызовут исключения, в противном случае используйте TryParse.

Philippe Mori

Кстати, то, что делает ОП, уже лучше того, что вы предлагаете сделать...

23741

Не могли бы вы подробнее рассказать об этом?

Philippe Mori

Зовущий int.TryParse предпочтительнее вашего IsThisAnInteger функция как бы выполнит валидацию, значение готово к использованию, код короче, ему требуется передать строку и он использует фреймворк-код.

23741

Пожалуйста, прочтите первое предложение в вопросе о плакатах.

Прежде чем дать ответ, необходимо понять вопрос.

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

Как говорится, вы либо часть решения, либо часть проблемы.

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

Philippe Mori

Ну, тогда идея ОП ошибочна, если он хочет сделать это сам... а если это задание, то решение 2 checkString функция гораздо лучше, чем у вас.

Так что, возможно, я неправильно понял вопрос OP, но, очевидно, из его кода было бы совершенно бессмысленно писать такую функцию...

Philippe Mori

Учитывая, что ОП сказал, что он учится сам, я не думаю, что мы поможем ему, дав ему именно то, что он просит... но вместо этого мы должны предложить ему лучший способ сделать это, что он уже сделал.

Рейтинг:
1

23741

Я считаю, что TryParse делает try/catch внутренне.