2012-12-26 25 views
1

可能重复:
What is a method group in C#?'+' 不允许串联串或方法组

什么是与 '+' 信号来连接的字符串的问题?

这是我的问题的打印屏幕:

http://pbrd.co/UtDf61

Json(new 
{ 
    dom = "RegistroUsuario", 
    type = "showErrorToast", 
    msg = "Erro: " + e, 
}, JsonRequestBehavior.AllowGet); 

string jsScript = "closeAndRedirectJson(" + Json + ")"; 

我收到的错误是

操作 '+' 不能应用于类型 '字符串' 的操作数和 '方法组'

+2

'Json'似乎是一个函数。函数不是一个字符串。此外,我们不希望链接到您的问题的屏幕截图 - 请仅在您的问题中包含代码并写出错误是什么。 – Ryan

+1

请尽量不要发布图片链接,而是将您的代码发布到问题本身。 –

回答

6

由于错误很明显地告诉你,Json既不是字符串也不是对象。

相反,这是一个方法组 –一个“引用”功能。
与Javascript不同,C#函数不是对象;您只能使用方法组来创建委托实例。 (这不是你想要的)

如果你想将你早期的对象转换成可用的JSON字符串,你需要直接使用JavascriptSerializer类。

Json()方法返回一个JsonResult实例,它只能用于将JSON写入响应主体;这里没用。

+0

谢谢..我会尽快接受芒! –

+0

当然,当'+'表示委托组合时,它的一个操作数_can_可以是一个方法组。也许如果'f'是'Func <对象,字符串,JsonResult>'或任何需要的签名,则允许'f + Json'。 –

+0

@GuilhermeLongo:如果你这么说... :) – SLaks

-6

这是一个function。不是string。你不能连接使用它。

+1

错误。这也会编译。这是一个方法组。 – SLaks

+0

@SLaks谢谢。更新。 –

3

考虑以下几点:

static string X() { return "hello"; } 
static void Main() 
{ 
    Console.WriteLine(X + "goodbye"); 
} 

你看这个问题?该代码连接方法X与字符串“再见”。但是一个方法不是可以连接到一个字符串的东西!打算用调用方法。正确的代码是:

Console.WriteLine(X() + "goodbye"); 

它是不是从你的程序片段清楚地知道你打算在那里来连接的,但Json是一种方法,不是可以用一个字符串连接在一起。

顺便说一句,该编译器错误使用有些混乱,术语“方法组”的原因是因为你可能会在这种情况下:

static string X(int y) { return "hello"; } 
static string X(double z) { return "hello"; } 
static void Main() 
{ 
    Console.WriteLine(X + "goodbye"); 
} 

现在是不清楚哪些方法X是并且事实上,C#语言表示X表示两个方法。这样的表达被分类为“方法组”。 重载分辨率的过程从方法组中挑选出一种独特的最佳方法。

+0

它实际上比这更糟; 'Json()'既不返回字符串也不返回带有可用'ToString()'的对象。 – SLaks