如何创建接受任何形式的数字的函数?

时间:2016-09-19 11:55:23

标签: c#

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
    }
}

3 个答案:

答案 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.Parseint.TryParse

即可

享受

相关问题