我的方法如下↓
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。
答案 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)