我有以下场景,我得到一个如下所示的字符串
"System.DateTime?"
Run Code Online (Sandbox Code Playgroud)
或者
"int?"
Run Code Online (Sandbox Code Playgroud)
我希望能够做的是检索该字符串的 System.Type ,它看起来像:
{Name = "Nullable
1" FullName = "System.Nullable1[[System.DateTime, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"}
现在我知道如何从字符串中检索类型我可以Type.GetType("System.DateTime")在处理不可为空类型时或typeof(DateTime?)当我知道它将为 DateTime 为空时说,但在这种情况下,我不知道什么可以为空类型可能会出现并将只接收它作为字符串。
我缺少上下文的一部分 - 例如,字符串是否总是表示可为空的值类型?
鉴于您可以从字符串中提取值类型名称并创建对该类型的引用:
var valueType = Type.GetType("System.DateTime");
var nullableType = typeof(Nullable<>).MakeGenericType(valueType);
Run Code Online (Sandbox Code Playgroud)
这应该可以解决部分问题。更难的部分是从字符串中确定底层类型,这取决于您收到的输入类型。从 获取类型很容易System.DateTime,但从int. 这个答案可能对那部分有所帮助。
至于输入 - 是否有任何选项可以为用户提供可用选项列表,以便您收到的输入始终是有效的类型名称?这将否定对任何这些的需要。那你就可以了Type.GetType(stringWithTypeName)。
除了斯科特的答案之外,您还可以使用Type.GetType正确的名称:
System.Nullable`1[System.DateTime]
Run Code Online (Sandbox Code Playgroud)
所以这个函数将为你返回正确的类型。
public Type GetType(string typeString)
{
if (typeString.EndsWith("?"))
{
typeString = $"System.Nullable`1[{typeString.TrimEnd('?')}]";
}
return Type.GetType(typeString);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1338 次 |
| 最近记录: |