gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 19:37:23 26 4
gpt4 key购买 nike

我正在使用以下方法将字符串类型转换为泛型类型

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”时会做什么。它将查看用您添加的引用程序集填充的符号表,并考虑到有效的 using 指令,并记录该表中可能存在的匹配项。

你必须在你的程序中实现类似的东西。相当于编译器符号表的是 Dictionary<string, Type> 。您可以通过用您喜欢与短字符串名称一起使用的类型填充它来填充它。喜欢

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

现在你可以写:

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

这样就可以了。但我猜你不会喜欢写这个。很难击败编译器。

关于c#-4.0 - 通过将所需类型作为参数传递来将字符串值转换为特定类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23216024/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com