Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Console application 带有类的控制台程序,仅显示整数_Console Application - Fatal编程技术网

Console application 带有类的控制台程序,仅显示整数

Console application 带有类的控制台程序,仅显示整数,console-application,Console Application,我有一个任务,需要使用两个类,其中ValueInput{}类包含两个方法。在将返回值的位置添加并获取值 这是我的密码: public class ValueInput { public void Add(char c) { c.ToString(); } public string FetchValue() { char c = default(char); Add(c); return

我有一个任务,需要使用两个类,其中ValueInput{}类包含两个方法。在将返回值的位置添加并获取值

这是我的密码:

public class ValueInput
{
    public void Add(char c)
    {
        c.ToString();
    }

    public string FetchValue()
    {
        char c = default(char);
        Add(c);

        return c.ToString();
    }

}

public class NumberInput
{
    // This should inherit the ValueInput and needs to ignore every characters and accept only integer.
    public static implicit operator ValueInput(NumberInput v)
    {
        int numberOnly, intOnly = 0;

        if(int.TryParse(v.ToString(), out numberOnly))
        {
            intOnly += Convert.ToInt16(v);
        }
        else
        {
            intOnly += 0;
        }

        return v;
    }
}
这是我的客户输入执行的地方

public class ClientInput
{
    public static void Main(string[] args)
    {
        ValueInput value = new NumberInput();
        value.Add('1');
        value.Add('j');
        value.Add('2');
        value.Add('3');
        Console.WriteLine(value.FetchValue());
    }
}
预期结果应该是:

123 // which ignores the "j" or any other characters.
我有个问题,上面说

System.StackOverflowException // on the line of if(int.TryParse(v.ToString(), out numberOnly))
提前感谢

问题在于:

return v;
隐式转换应返回一个
值input
。但是,返回的值是一个
NumberInput
。编译器看到并说“哦,隐式转换存在!”并再次调用隐式转换。在此调用中,
v
,再次返回
NumberInput
,编译器再次尝试使用隐式转换,并再次返回
v
,依此类推

由于这是无限递归,因此发生了
StackOverflowException

我还注意到,您没有使用局部变量
的数量
的数量

根据您想要的输出,我认为这可能是您需要的:

public class ValueInput
{
    protected List<char> list = new List<char>();
    public virtual void Add(char c)
    {
        list.Add(c);
    }
    public string FetchValue()
    {
        return list.Aggregate("", (x, y) => x + y.ToString());
    }
}

public class NumberInput: ValueInput
{
    public override void Add(char c) {
        if (Char.IsNumber(c)) {
            list.Add(c);
        }
    }
}

您没有向我们展示什么是
DigitalInput
,这让我们很难提供帮助。请提供一份报告。请注意,如果
DigitalInput.ToString()
引发异常,那么您可能不需要另外一半的代码。。。请确保您的示例是最小的,因为它不包含任何不需要的内容,并且完整的是,我们可以复制/粘贴/编译/运行并查看问题。还请注意,您的转换只返回
v
-
numberOnly
intOnly
被忽略。应该是,NumberInput对于我的错误键入表示抱歉:(不,这仍然没有编译。与其只是做一个小小的更改,请注意我要求的内容。代码没有编译的事实表明问题不是由该代码引起的。我们无法帮助处理我们看不到的代码。很清楚为什么会得到
StackOverflowException
。您尝试返回参数er
v
implicit操作符ValueInput()
方法,这会导致编译器尝试将
v
NumberInput
隐式转换为实际需要的
ValueInput
返回类型。但不幸的是,其余代码没有任何意义。您可以返回
new ValueInput()
相反,但这看起来没有任何好处。“您可能想构造一个ValueInput对象”--给定显示的代码,这可以很容易地完成。但是该类没有字段,
Add()
方法没有任何用处。因此,虽然我们可以说出异常发生的原因,但这里实际上没有任何方法可以给出有用的答案。我试图返回InToOnly,但我遇到的问题是"无法将类型“int”转换为“ValueInput”@spidy787实际上,你知道你试图用这段代码实现什么吗?如果你返回
int
,你认为代码会做什么?这是有意义的,除了OP声称
StackOverflowException
发生在整数解析中之外。这可能是case如果
NumberInput
重写
ToString
的方式也会不适当地递归。@Sweeper如果我返回int,它将破坏给定的继承,因为公共静态隐式运算符ValueInput(NumberInput v)是一个带类型的隐式运算符。我将得到一个错误,表明它无法从类型转换为int。
ValueInput value = new NumberInput();
value.Add('1');
value.Add('j');
value.Add('2');
value.Add('3');
Console.WriteLine(value.FetchValue());