无法将类型'string'隐式转换为'String'

Mar*_*kFl 1 c# types compiler-errors

以下代码无法使用Cannot implicitly convert type 'string' to 'String'C#中的错误进行编译.

void Main()
{
    Console.Write("Hello".Append("Mark"));
}

public static class Ext
{
    public static String Append<String>(this String str, String app)
    {
        return str + " " + app;
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以通过扩展方法去除类型参数修正编译错误,但我不知道为什么这个不能编译因为typeof(string) == typeof(String)计算结果为true.

以下也适用:

void Main()
{
    Console.Write("Hello".Append("Mark"));
}
public static class Ext
{
    public static string Append<String>(this String str, string app)
    {
        return str + " " + app;
    }
}
Run Code Online (Sandbox Code Playgroud)

Jer*_*vel 8

Append<String>不是一个类型,它是一个类型参数的名称.它与使用相同,T除非你现在命名它String.

显然这会产生问题,因为现在您尝试将名称的泛型类型连接Stringstring文字.

你可以完全省略这个:

public static String Append(this String str, String app)
{
    return str + " " + app;
}
Run Code Online (Sandbox Code Playgroud)

第二种方法的工作原因是因为您现在使用string它可以消除名为type参数的歧义String.

这意味着您的串联包含名称的泛型类型String,它具有实际类型string,string文字和类型变量string.这可以再次编译,但它很难看,你永远不应该这样做.