Implicit conversion from number to string

Содержание

Я делаю эту простую операцию со строкой в VB.NET

У меня есть строка информации, называемая segmentInfo выглядит так:

Поэтому я просто пытаюсь получить номер из него:

И я получаю на самом деле 2 предупреждения. Оба предупреждения указаны в одной строке кода.

Может быть, я мог понять первый, о string integer . но второй? Я не понимаю.

В любом случае, может кто-нибудь сказать мне, что я делаю неправильно и как это исправить?

string vb.net warnings implicit-conversion

4 ответа

2 Решение Nico Schertler [2015-07-01 09:44:00]

Метод Split принимает Char (массив) как параметр, а не строку. Следовательно:

Во-вторых, вам нужно проанализировать полученную строку на целое число:

Сделайте это только тогда, когда вы знаете, что строка — это число. В противном случае используйте TryParse .

I currently have a generic class which allows the use of an expression as the value.

Читайте также:  Фотоаппарат со сменной оптикой fujifilm

What I would like to be able to do is to set properties using implicit conversions from both T and from string. However if the expression is of type string, the compiler cannot decide which conversion to use.

Is there a clever way around this?

4 Answers 4

You won’t be able to keep both implicit operators and expect to work with an Expression because of the better conversion rule

Given an implicit conversion C1 that converts from a type S to a type T1, and an implicit conversion C2 that converts from a type S to a type T2, the better conversion of the two conversions is determined as follows:

  • If T1 and T2 are the same type, neither conversion is better.
  • If S is T1, C1 is the better conversion.
  • If S is T2, C2 is the better conversion.
  • If an implicit conversion from T1 to T2 exists, and no implicit conversion from T2 to T1 exists, C1 is the better conversion.
  • If an implicit conversion from T2 to T1 exists, and no implicit conversion from T1 to T2 exists, C2 is the better conversion.
  • If T1 is sbyte and T2 is byte, ushort, uint, or ulong, C1 is the better conversion.
  • If T2 is sbyte and T1 is byte, ushort, uint, or ulong, C2 is the better conversion.
  • If T1 is short and T2 is ushort, uint, or ulong, C1 is the better conversion.
  • If T2 is short and T1 is ushort, uint, or ulong, C2 is the better conversion.
  • If T1 is int and T2 is uint, or ulong, C1 is the better conversion.
  • If T2 is int and T1 is uint, or ulong, C2 is the better conversion.
  • If T1 is long and T2 is ulong, C1 is the better conversion.
  • If T2 is long and T1 is ulong, C2 is the better conversion.
  • Otherwise, neither conversion is better.
Читайте также:  Почему нету витрины иллюстраций в стиме

If an implicit conversion C1 is defined by these rules to be a better conversion than an implicit conversion C2, then it is also the case that C2 is a worse conversion than C1.

With an Expression you are clearly in the first case, the compiler won’t choose for you and will just stop there.

If there is not exactly one function member that is better than all other function members, then the function member invocation is ambiguous and a compile-time error occurs.

So you won’t be able to handle with with conversion operators only; either create additional methods to deal with string explicitly, convert the string to T outside of the operator or create a wrapping abstraction that would be able to tranport T, a string representation of T or the ExpressionText value and convert from it.

Описание

Новый язык программирования терминала МТ4 стал очень богатым. Он существенно расширил свои границы, здесь появились классы, ООП, графические элементы, новые операции с счетом, новые функции. Но и проблем с старым кодом здесь также присутствует.

1. Названия переменных с вспомогательными символами например . (точка)

2. Задекларированных переменных теперь больше, и переменные, которые были названы именами новых функций — требует изменения имени.

3. Каждая функция теперь должна иметь оператор возврата RETURN

4. Функция switсh в качестве выражения может принимать только Целые числа

5. Все переменные объявленные внутри функции, должны отличаться от названий глобальных переменных (Необязательно)

6. Все переменные, должны соответствовать по типу в используемых функциях

7. Сторонние библиотеки и функции , которые включают в себя передачу строк в DLL

8. Жесткий поиск ошибок #property strict

9. Все остальные ошибки и предупреждения решаются в индивидуальном порядке.

10. Еще один нюанс в 625 билде терминала мт4 should be checked

  • return value of ‘OrderSelect’ should be checked
  • return value of ‘OrderDelete’ should be checked
  • return value of ‘OrderSend’ should be checked
  • return value of ‘OrderClose’ should be checked
  • return value of ‘OrderModify’ should be checked
Читайте также:  Фен для волос philips

для того, чтобы не было таких предупреждений нужно явно указать возврат в переменную
например так:

  • bool select1=OrderSelect.
  • bool delete1= OrderDelete .
  • bool close1= OrderClose .
  • bool modify1= OrderModify .
  • int send1= OrderSend .

11. check operator precedence for possible error; use parentheses to clarify precedence

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

например у Вас написано:

то предупреждение пропадет.

Т.е. если у Вас в условии написано и и и или или или , без скобок,

не хватает скобок, их нужно расставить правильно.

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