public static void AddCharToNum <I> (ref I OriginalNumber, char NumberToAdd_Char) where I : struct {
double NumberToAdd = char.GetNumericValue (NumberToAdd_Char);
OriginalNumber = OriginalNumber * 10 + (int) NumberToAdd;
}
它显示以下错误:运算符*' cannot be applied to operands of type
我'和'int'
编辑:我想解决的问题是:
我不想一次又一次地重复这段代码:
switch (ParseState) {
case 1:
{
a = (a * 10) + char.GetNumericValue (NumberToAdd_Char);
}
case 2:
{
x = (x * 10) + char.GetNumericValue (NumberToAdd_Char); //where x is a float
}
case 3:
{
b = (b * 10) + char.GetNumericValue (NumberToAdd_Char); //where b is a double
}
case 4:
{
c = (c * 10) + char.GetNumericValue (NumberToAdd_Char); //where c is an integer
}
}
答案 0 :(得分:1)
由于您无论如何都要向结果中添加浮点数,您也可以使用float或double变量。此外,似乎您的方法逻辑上返回带有附加字符的数字,同时具有void返回类型。我会按如下方式重写你的方法:
public static double AddCharToNum (double originalNumber, char charToAdd) {
double numberToAdd = char.GetNumericValue(charToAdd);
return originalNumber * 10 + numberToAdd;
}
答案 1 :(得分:0)
我猜你使用的是自定义类,它提供了一个数值。如果是这样,您应该使用运算符重载。
C#允许用户定义的类型通过使用operator关键字
定义静态成员函数来重载运算符
查看此页面以获取更多信息:MSDN: Overloadable Operators (C# Programming Guide)
这是一个简单的例子:
public static I operator *(I first, int second)
{
/* Pseudo code:
var number = first.Value;
I outVal = new I();
outVal.Value = number * second;
return outVal;
*/
}
在“I”等不同/泛型类型上使用这些运算符时。在使用运算符之前创建变量动态。 像这样:
dynamic dynOriginalNumber = OriginalNumber;
OriginalNumber = (OriginalNumber)(dynOriginalNumber * 10 + (float) NumberToAdd);
答案 2 :(得分:0)
在我看来,你试图将一些数字串解析成整数位数,我对吗? 如果是这种情况,只需使用int.Parse或int.TryParse
即可享受