将字符串解析为通用类型

米格尔·莫拉(Miguel Moura)

我正在尝试将String转换为通用类型,例如:

Int16, Int32, Int64, Double, Boolean, DateTime, Guid, ...

我创建了以下对Ints和Booleans正常工作的代码:

public static Boolean TryParse<T>(String source, out T value) {

  TypeConverter converter = TypeDescriptor.GetConverter(typeof(T));

  try {

    value = (T)converter.ConvertFromString(source);
    return true;

  } catch {

    value = default(T);
    return false;

  }

}

但是,它不适用于双打,日期,...

不使用通用的TryParse,我就可以使它工作:

  List<String> values = new List<String> { "1", "true", "2.125", "C", "20-08-2016" };

  List<Object> parsed = new List<Object>();

  foreach (String value in values) {

    Int32 i;
    Boolean b;
    Double d;
    DateTime dt;

    if (Int32.TryParse(value,NumberStyles.Integer, CultureInfo.InvariantCulture, out i)) {
      parsed.Add(i);
    } else if (Boolean.TryParse(value, out b)) {
      parsed.Add(b);
    } else if (Double.TryParse(value, NumberStyles.Float, CultureInfo.InvariantCulture, out d)) {
      parsed.Add(d);
    } else if (DateTime.TryParse(value, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out dt)) {
      parsed.Add(dt);
    } else {
      String s = value;
      parsed.Add(s);
    }

  }

但是正如您所看到的,我正在向每个TryParse传递一些参数,这似乎是Doubles和DateTimes特别需要的。

问题是在我正在创建的系统中,我不确定将字符串解析为哪种类型,因此这就是我使用泛型的原因。

我该如何进行这项工作?

例子

解析双重的单元测试:

public void TryParse_ParseStringToDouble() {

  Double result;

  StringExtensions.TryParse("2040.345434", out result);

  Assert.Equal(result, 2040.345434);

}

有了这个我在TryParse上出现异常:

2040.345434 is not a valid value for Double.

我认为这是因为我应该在正在使用的计算机上使用“ 2040,345434” ...但是无论如何我都希望它能正常工作...

马特·罗兰(Matt Rowland)

如果您希望能够进行转换,则可以使用以下方法。

public T ConvertToType<T>(string input)
{
    return (T)Convert.ChangeType(input, typeof(T));
}

用法:

string input = "06/23/2016";
DateTime date = ConvertToType<DateTime>(input);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将字符串解析为通用类型

来自分类Dev

将字符串解析为通用Comparable

来自分类Dev

将字符串解析为不同类型

来自分类Dev

如何将字符串解析为无类型

来自分类Dev

解析为DateTime类型的字符串

来自分类Dev

将字符串解析为整数

来自分类Dev

将字符串解析为对象

来自分类Dev

将字符串解析为LPCWSTR

来自分类Dev

将字符串解析为JSON

来自分类Dev

将字符串解析为哈希

来自分类Dev

将字符串解析为字典

来自分类Dev

将字符串解析为Ast

来自分类Dev

将字符串解析为JSON

来自分类Dev

将字符串解析为数组

来自分类Dev

将字符串解析为对象

来自分类Dev

将字符串解析为JSON

来自分类Dev

将字符串解析为JSON

来自分类Dev

将字符串解析为DateTime

来自分类Dev

将字符串解析为localdatetime

来自分类Dev

将字符串解析为整数

来自分类Dev

将字符串解析为变量

来自分类Dev

将字符串流解析为字符串并加倍

来自分类Dev

将表解析为字符串后->反转(将字符串解析为表)

来自分类Dev

将表解析为字符串后->反转(将字符串解析为表)

来自分类Dev

KOTLIN将字符串转换为通用类型

来自分类Dev

如何将字符串转换为通用类型

来自分类Dev

如何将字符串解析为其数据类型?

来自分类Dev

将字符串解析为数据类型:更好的错误消息?

来自分类Dev

Java将字符串的内容解析为行,自动检测行类型