通用函数错误

New*_*bee 1 c# generics

我正在尝试用泛型编写简单的C#函数.例如,数组解析器.

public static int parse_array <T> ( string str, ref T[] array ) 
    where T : IConvertible<T>
{
    string[] vals=str.Split(new char[]{'','\t',',',';'}, StringSplitOptions.RemoveEmptyEntries);

    if( vals==null || vals.Length==0 )
        return 0;

    array = new T[vals.Length];

    for( int i=0; i<vals.Length; i++ )
    {
        array[i] = Convert.ChangeType ( vals[i], T );
    }

    return vals.Length; 
}
Run Code Online (Sandbox Code Playgroud)

但我收到错误:非泛型类型'System.IConvertable'不能与type参数一起使用.怎么了 ?

Jam*_*are 5

您的特定编译器错误的问题是它IConvertible不是通用接口,您的子句应该是:

where T : IConvertible
Run Code Online (Sandbox Code Playgroud)

where T : IConvertible<T>
Run Code Online (Sandbox Code Playgroud)

实际上,编译器错误告诉您正在尝试将类型参数(即<T>)放在非泛型类型(即接口IConvertible)上.虽然某些接口是通用的或具有通用并行,但IConvertible不是其中之一.

然后,此外,你将要使用typeof(T)而不是T在你的调用中ChangeType,因为T是一个类型名称,而不是Type像克里斯提到的实例...