0

我只是从 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.

有什么问题?

4

5 回答 5

2

给定这个类:

class MyClass
{
    public string ToString(bool param)
    {
        return param.ToString();
    }
}

此代码将按预期工作:

MyClass myClass = new MyClass();
string s = myClass.ToString(true);

因此,您未向我们展示的部分代码存在错误。

可能性:

方法名称中的错字?使用错误的类?

于 2013-11-14T08:49:20.817 回答
1

C# 区分大小写。您的方法是“ToString”,但您正在调用“toString”

改变

myClass.toString(true);

myClass.ToString(true); // <-- capital T
于 2013-11-14T08:41:26.493 回答
0

覆盖 - 您需要使用 override 关键字。但是,您不能覆盖默认的 ToString() 方法,因为它是无参数的,因此您无法“修改”它以添加参数,因此您需要创建另一个方法。

但你的例子无论如何都不起作用。C# 区分大小写,因此您需要调用:

myClass.ToString(true)

不是:

myClass.toString(true)
于 2013-11-14T08:42:46.233 回答
0

错误告诉你到底哪里出了问题。

当覆盖一个方法(你错过了“覆盖”)关键字时,你必须保留参数。所以你可以覆盖 .ToString(),但不能覆盖 .ToString(bool something)

因为您肯定想要实现与 .ToString()-Method 完全不同的东西,所以我只是建议编写一个完整的自己的方法而不是覆盖

我的建议是:

public override string ToString() {
   return string.Format(Address);
} 
public string ToStringParam() {
   return string.format(FIO);
}
于 2013-11-14T08:49:12.910 回答
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);
     }
   }   
}
于 2013-11-14T09:28:20.353 回答