代码之家  ›  专栏  ›  技术社区  ›  Aleksa Ristic

将char作为int传递

c#
  •  0
  • Aleksa Ristic  · 技术社区  · 7 年前

    我有两个类似的功能:

    public static int Result(int x, int y)
    {
        return x * y;
    }
    
    public static int Result(int x, char Anything)
    {
        if(Anything.Equals('M'))
            return x * x;
        else
            return x;
    }
    
    int r = Result(2, 2); // Returns 4
    int r1 = Result(2, 'T'); // Returns 2
    int r2 = Result(2, 'M'); // Returns 4
    

    我的问题是当我改变的时候 public static int Result(int x, char Anything) public static int Result(int x, char[] Anything)

    这使我产生问题的原因是,由于某种原因,我的复杂函数在编译并尝试使用它之后总是返回错误。几个小时后,我发现改变给了我一个问题。

    因为我改变了方法 char[] 而不是 char Visual Studio 告诉我 cannot convert char to char[] 但因为我还有其他的功能 int, int 我有 int, char 通过它没有返回我的错误。

    我想这是因为 它是数值,当我改变其他函数时,编译器去查看其他同名方法并找到一个 内景,内景 但他可以从 烧焦 int

    我的另一个问题是我的猜测对吗?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Patrick Hofman Wahid Bitar    7 年前

    感觉你的设计有缺陷,或者至少你的方法名有缺陷,但可能只是过于简化了。这里的解决方案是使用 params 选项。它仍然将字符与 int, char[] 签名。

    public static int Result(int x, params char[] Anything)
    {
        if (Anything.Contains('M'))
            return x * x;
        else
            return x;
    }
    
        2
  •  1
  •   nvoigt    7 年前

    你在这里没什么可做的。是的,这是因为隐式转换。

    为了尽早发现这些错误,您可以通过单元测试获得良好的代码覆盖率。看到一些测试失败,看到您的方法 char[] 完全不再覆盖将导致您很快找到问题,而不是在几个小时的调试后发现问题。