如何将string []转换为T?

时间:2011-08-14 11:53:54

标签: c#

我的方法如下↓

    static T GetItemSample<T>() where T : new ()
    {
        if (T is string[])
        {
          string[] values = new string[] { "col1" , "col2" , "col3"};
          Type elementType = typeof(string);
          Array array = Array.CreateInstance(elementType, values.Length);
          values.CopyTo(array, 0);
          T obj = (T)(object)array;
          return obj;
        }
        else
        {
          return new T();
        }
  }

调用↓

等方法时出错
string[] ret = GetItemSample<string[]>();

当param是string []?

时,是否有人可以告诉我如何使用该方法?

thks。

2 个答案:

答案 0 :(得分:4)

第一个错误('T' is a 'type parameter' but is used like a 'variable')是T is string[]不起作用。您可以使用typeof(string[])==typeof(T)

第二个错误('string[]' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'T' in the generic type or method 'UserQuery.GetItemSample<T>()')是string[]没有默认构造函数,但通用约束要求它有一个。

static T GetItemSample<T>()
    {
        if (typeof(string[])==typeof(T))
        {
          string[] values = new string[] { "col1" , "col2" , "col3"};
          Type elementType = typeof(string);
          Array array = Array.CreateInstance(elementType, values.Length);
          values.CopyTo(array, 0);
          T obj = (T)(object)array;
          return obj;
        }
        else
        {
          return Activator.CreateInstance<T>();
        }
  }

此代码的缺点是,如果T没有默认构造函数而不是编译时,它会在运行时抛出错误。

答案 1 :(得分:1)

你的方法必须像

static T GetItemSample<T>(T[] obj)

static T GetItemSample<T>(T obj)