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

本文关键字:任何形 函数 数字 何创建 创建 一个 | 更新日期: 2023-09-27 18:07:30

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 I' and ' 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
    }
}

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

既然你是添加浮点数的结果无论如何,你不妨只是使用浮点或双变量。此外,似乎您的方法在逻辑上返回带有额外字符的数字,同时具有void返回类型。我将重写你的方法如下:

public static double AddCharToNum (double originalNumber, char charToAdd) {
    double numberToAdd = char.GetNumericValue(charToAdd);
    return originalNumber * 10 + numberToAdd;
}

在我看来,你试图解析一些字符串的数字成整数的数字,我是对的?如果是这种情况,只需使用int。解析或整型。TryParse

享受

我猜您正在使用提供数值的自定义类。如果是这样,应该使用操作符重载。

c#允许用户定义类型通过使用operator关键字 定义静态成员函数来重载操作符。

查看此页了解更多信息:MSDN:可重载操作符(c#编程指南)

下面是一个简单的例子:

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);