加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c#-4.0 – 通过将所需类型作为参数传递,从字符串值转换为特定类

发布时间:2020-12-16 02:01:17 所属栏目:百科 来源:网络整理
导读:我使用以下方法将字符串类型转换为泛型类型 public static T ParseT(string value){ // or ConvertFromInvariantString if you are doing serialization return (T)TypeDescriptor.GetConverter(typeof(T)).ConvertFromString(value);} 我必须这样称呼它 Par
我使用以下方法将字符串类型转换为泛型类型

public static T Parse<T>(string value)
{
    // or ConvertFromInvariantString if you are doing serialization
    return (T)TypeDescriptor.GetConverter(typeof(T)).ConvertFromString(value);
}

我必须这样称呼它

Parse<Int32>(Some string value);
Parse<DateTime>(Some string value);

我正在尝试而不是明确地给出结果类型,我可以给它一样

Parse<Type.GetType("Int32")>(Some string value);

解决方法

仿制药在这里不在考虑范围内.主要问题是您尝试使用类型标识的快捷方式.类型的名称不仅仅是您在程序中使用的类型名称.它还包括声明它的名称空间,存储它的程序集的显示名称,程序集的版本号以及程序集强名称的公钥标记.换句话说,Type.AssemblyQualifiedName.

这要求您编写类似于此的代码:

Parse(Type.GetType("System.Int32,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089""),SomeStringValue);

这将工作得很好.但我猜你不会喜欢写这个.否则,可以让您深入了解编译器在程序中读取“Int32”时所执行的操作.它将在其符号表中查找已添加的引用程序集,并注意该表中可能存在的匹配项,考虑使用指令有效.

你必须在你的程序中实现类似的东西.编译器的符号表的等价物是Dictionary< string,Type>.您可以通过使用您希望使用短字符串名称的类型填充它来填充它.喜欢

LookupTable.Add("Int32",typeof(int));
  LookupTable.Add("String",typeof(string));
  // etc...

现在你可以写:

Parse(LookupTable["Int32"],SomeStringValue);

这将工作得很好.但我猜你不会喜欢写这个.很难击败编译器.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读