如何创建一个接受任何形式的数字的函数
本文关键字:任何形 函数 数字 何创建 创建 一个 | 更新日期: 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);
标题>