Как определить, является ли строка числом в C#

Основным преимуществом является то, что массивы загружаются лениво. То есть, если у вас есть файл npz с 100 массивами, вы можете загрузить файл без фактической загрузки каких-либо данных. Если вы запрашиваете один массив, загружаются только данные для этого массива.

Недостатком файлов npz является то, что они не могут отображаться в памяти (используя load(, mmap_mode='r')), поэтому для больших массивов они могут быть не лучшим выбором. Для данных, где массивы имеют общую форму, я бы посоветовал взглянуть на структурированные массивы . Они могут быть отображены в память, разрешать доступ к данным с помощью dict-подобного синтаксиса (то есть, arr['field']) и очень эффективны в отношении памяти.

11
задан Pierre Arnaud 26 March 2013 в 05:06
поделиться

4 ответа

С точки зрения эффективности, да, TryParse обычно является предпочтительным маршрутом.

Если Вы можете знать (например, отражением) целевой тип заранее - но не хотите должными быть использовать большое switch блок, Вы могли бы интересоваться использованием TypeConverter - например:

        DateTime foo = new DateTime(2008, 11, 20);
        TypeConverter converter = TypeDescriptor.GetConverter(foo);
        string s = converter.ConvertToInvariantString(foo);
        object val = converter.ConvertFromInvariantString(s);
9
ответ дан 3 December 2019 в 02:42
поделиться

Я рекомендовал бы.TryParse () лично. Это - то, что я использую во всяком случае. Это - то, если Ваши данные будут неправильными время от времени. Если Вы уверены, что входящие строки смогут преобразовать в целые числа или удваиваются без помехи.Parse () быстрее.

Вот интересная ссылка для поддержки этого.

2
ответ дан 3 December 2019 в 02:42
поделиться

Int.TryParse и Double.TryParse обладайте преимуществом фактического возврата числа.

Что-то как Regex.IsMatch("^\d+$") имеет недостаток, что все еще необходимо проанализировать строку снова для вывода значения.

20
ответ дан 3 December 2019 в 02:42
поделиться

Сохраняя идею преобразователя пропустить блок переключателя, Вы могли использовать понятие Утиного Ввода. В основном Вы хотите повернуть строку к X, таким образом, Вы делаете метод, который назовет X.TryParse (строка, X x), если X будет иметь TryParse на нем, иначе Вы просто не беспокоитесь (Или я предполагаю, что Вы могли бросить ошибку). Как Вы сделали бы это? Отражение и Дженерики.

В основном у Вас был бы метод, который будет брать в типе и использовать отражение, чтобы видеть, имеет ли оно TryParse на нем. При нахождении такого метода, Вы затем называете его и возвращаетесь, любому TryParse удалось добраться. Это работает хорошо с примерно любым типом значения, любят, говорят Десятичное число или DateTime.

public static class ConvertFromString
{
  public static T? ConvertTo<T>(this String numberToConvert) where T : struct
  {
    T? returnValue = null;

    MethodInfo neededInfo = GetCorrectMethodInfo(typeof(T));
    if (neededInfo != null && !numberToConvert.IsNullOrEmpty())
    {
      T output = default(T);
      object[] paramsArray = new object[2] { numberToConvert, output };
      returnValue = new T();

      object returnedValue = neededInfo.Invoke(returnValue.Value, paramsArray);

      if (returnedValue is Boolean && (Boolean)returnedValue)
      {
        returnValue = (T)paramsArray[1];
      }
      else
      {
        returnValue = null;
      }    
    }

    return returnValue;
  }
}

Где GetCorrectMethodInfo выглядел бы примерно так:

private static MethodInfo GetCorrectMethodInfo(Type typeToCheck)
{

  MethodInfo returnValue = someCache.Get(typeToCheck.FullName);

  if(returnValue == null)
  {
    Type[] paramTypes = new Type[2] { typeof(string), typeToCheck.MakeByRefType() };
    returnValue = typeToCheck.GetMethod("TryParse", paramTypes);
    if (returnValue != null)
    {
      CurrentCache.Add(typeToCheck.FullName, returnValue);
    }
  }

  return returnValue;
}

И использование было бы:

decimal? converted = someString.ConvertTo<decimal>();

Я очень не хочу включить меня, но мне объяснили это полностью здесь:

GetCorrectMethodInfo

Отдых его

0
ответ дан 3 December 2019 в 02:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: