我刚开始用c# 我想用参数覆盖toString()方法。我这样做:
public string ToString(bool param)
{
if (param)
{
return string.Format(FIO);
}
else
{
return string.Format(Address);
}
}
并称之为:
myClass.toString(true);
但是得到错误:
method toString() has 0 parameters but invoked with 1 argument.
什么可能是错的?
答案 0 :(得分:2)
鉴于此课程:
class MyClass
{
public string ToString(bool param)
{
return param.ToString();
}
}
此代码将按预期工作:
MyClass myClass = new MyClass();
string s = myClass.ToString(true);
因此,您未向我们展示的部分代码中存在错误。
的可能性:
方法名称中的错字? 使用错误的类?
答案 1 :(得分:1)
C#区分大小写。你的方法是“ToString”,但你正在调用“toString”
更改
myClass.toString(true);
到
myClass.ToString(true); // <-- capital T
答案 2 :(得分:0)
要覆盖 - 您需要使用override关键字。但是,您无法覆盖默认的ToString()方法,因为它是无参数的,因此您无法“修改”它以添加参数,因此您需要创建另一个方法。
但是你的例子无论如何都不起作用。 C#区分大小写,因此您需要调用:
myClass.ToString(true)
NOT:
myClass.toString(true)
答案 3 :(得分:0)
错误告诉你究竟出了什么问题。
当覆盖某个方法(错过了“覆盖”)关键字时,您必须保留参数。所以你可以覆盖.ToString(),但不能覆盖.ToString(bool something)
你肯定希望获得与.ToString()完全不同的东西 - 方法我只是建议编写一个完整的自己的方法而不是覆盖
我的建议是:
public override string ToString() {
return string.Format(Address);
}
public string ToStringParam() {
return string.format(FIO);
}
答案 4 :(得分:0)
我认为您使用的是基类中错误的ToString。由于某种原因,编译器找不到正确的字符串;也许你正在某个地方投射物体。
对于这个问题;我建议你使用扩展方法:
namespace ExtensionMethods
{
public static class MyExtensions
{
// I DONOT KNOW YOUR OBJECT TYPE I JUST HAVE USED A DUMMY THING; YOU CAN REPLACE IT!!!!
public static string ToString(this MyType myClass, bool param)
{
if (param)
{
return string.Format(myClass.FIO);
}
return string.Format(myClass.Address);
}
}
}