【问题标题】:How to get .NET array type from the string "string[]"?如何从字符串“string[]”中获取 .NET 数组类型?
【发布时间】:2009-11-23 12:23:49
【问题描述】:

给定字符串"string[]" 并要求获取此类的基础类型,可以从以下内容开始:

private Type getTypeByName(string typeName)
{
    if (typeName.EndsWith("[]"))
    {
           return something; // But what? 
    }

    return Type.GetType(typeName);
}

"string[]" 是什么类型,如何反映它的类型?

显然有一个System.String 类型和一个System.Array 类型,但我看不出它们如何像您通常使用MakeGenericType 方法对Nullable<T> 及其T 所做的那样“一起”反映。

任何有助于打破我陷入的思维循环的帮助将不胜感激!

【问题讨论】:

    标签: c# arrays reflection


    【解决方案1】:

    您的问题到底是什么? Type.GetType 工作正常:

    Console.WriteLine(typeof(string[]));
    var type = Type.GetType("System.String[]");
    Console.WriteLine(type);
    

    打印:

    System.String[]
    System.String[]
    

    很明显,这按预期工作。

    【讨论】:

    • 啊,这很公平。但是如果输入的是“string[]”而不是“System.String[]”呢?
    • @tags:好吧,string 是一个 C# 关键字,它不是 CLR/CTS 类型,所以你不能指望 CLR 知道它。如果您绝对必须使用它,请将所有 C# 关键字类型映射放入字典中,并使用该字典替换输入字符串中的这些类型。
    • 我明白了,但我想我会传递关键字字典!感谢您的帮助。
    【解决方案2】:

    在类型上使用 GetElementType():

    string[] eee = new string[1];
    Type ttt = eee.GetType().GetElementType();
    

    ttt 是字符串类型。

    【讨论】:

      【解决方案3】:

      Type.GetType("System.String[]") 将返回字符串数组类型。无需检查输入字符串中的 []。

      您可以通过检查 Type.IsArray 属性来验证这一点。

      【讨论】:

        【解决方案4】:

        类型是 System.String[]

        【讨论】:

          猜你喜欢
          • 2023-02-25
          • 1970-01-01
          • 2014-01-01
          • 2011-03-05
          • 2011-05-07
          • 1970-01-01
          • 1970-01-01
          • 2015-01-24
          相关资源
          最近更新 更多