Console application 带有类的控制台程序,仅显示整数
我有一个任务,需要使用两个类,其中ValueInput{}类包含两个方法。在将返回值的位置添加并获取值 这是我的密码: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
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
。您尝试返回参数erv
从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());