如何为T [],T [] []编写重载的泛型扩展方法而没有歧义?

Raj*_*eev 5 c# generics extension-methods default-parameters

我想编写用于将向量和矩阵转换为字符串的扩展方法.我是用以下方式做到的.

对于矢量

public static string GetString<T>(this T[] SourceMatrix, string ColumnDelimiter = " ")
{
    try
    {
        string result = "";
        for (int i = 0; i < SourceMatrix.GetLength(0); i++)
            result += SourceMatrix[i] + ColumnDelimiter;
        return result;
    }
    catch (Exception ee) { return null; }
}
Run Code Online (Sandbox Code Playgroud)

对于Matrix

public static string GetString<T>(this T[][] SourceMatrix, string ColumnDelimiter = " ", string RowDelimiter = "\n")
{
    try
    {
        string result = "";
        for (int i = 0; i < SourceMatrix.GetLength(0); i++)
        {
            for (int j = 0; j < SourceMatrix[i].GetLength(0); j++)
                result += SourceMatrix[i][j] + "" + ColumnDelimiter;
            result += "" + RowDelimiter;
        }
        return result;
    }
    catch (Exception ee) { return null; }
}
Run Code Online (Sandbox Code Playgroud)

现在我使用以下代码导致歧义.

List<double[]> Patterns= GetPatterns(); 
Patterns.ToArray().GetString();
Run Code Online (Sandbox Code Playgroud)

错误

Error   5   The call is ambiguous between the following methods or properties: 
'MatrixMathLib.MatrixMath.GetString<double[]>(double[][], string)' and 
'MatrixMathLib.MatrixMath.GetString<double>(double[][], string, string)'    
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议我正确编写这些扩展方法.

提前致谢.

Ali*_*eza 4

你的方法没有任何问题。编译器无法在它们之间进行选择。

正如您在错误消息中看到的,编译器可能会假设Tanddouble[]匹配第一个方法,或者doubleand 匹配第二个方法。这可以通过明确提及您要使用哪种方法来解决:

Patterns.ToArray().GetString<double>();
Run Code Online (Sandbox Code Playgroud)