如何为两个值创建通用的添加方法

本文关键字:创建 方法 添加 两个 | 更新日期: 2023-09-27 18:12:07

例如,如果两个值都是int类型,则将它们相加....ie 2+2=4

如果两个值都是float....ie 2.2+2.3=4.5或者如果一个值是string,另一个是int…ie 1 + Pak=1Pak

我们将使用两个文本框从user获取这两个值

如何为两个值创建通用的添加方法

这是一种方法。无需转换为字符串,然后再返回到数字。

public object Add(IConvertible a, IConvertible b)
{
    if(IsNumeric(a) && IsNumeric(b))
        return a.ToDouble(CultureInfo.InvariantCulture) + b.ToDouble(CultureInfo.InvariantCulture);
    return a.ToString() + b.ToString();
}
public static bool IsNumeric(object o)
{
    var code = (int)Type.GetTypeCode(o.GetType());
    return code >= 4 && code <= 15;
}

不能使用泛型。无论如何,您将从文本框收到string。唯一要做的就是像你说的那样"手动"实现它:

public string TrySumTwoStrings(string input1, string input2)
{
    double numeric1, numeric2;
    if (Double.TryParse(input1, out numeric1) && Double.TryParse(input2, out numeric2))
        return (numeric1 + numeric2).ToString();
    return input1 + input2;
}

如果没有不同的类型,就没有办法使用泛型(这里所有的类型都是string)。

不能,泛型不能以支持算术运算符(或连接)的方式进行约束。您需要创建重载。

public int Add(int x, int y)
public double Add(double x, double y)
public decimal Add(decimal x, decimal y)
// etc.

当然,您仍然有确定如何准确解析数据的问题。源是一个TextBox,数据本质上是字符串。如果有的话,您必须确定它应该是哪种类型的数字。

如果在真正的应用程序中这样做,应该不会有这个问题。您的文本框应该期望以整数、小数或字符串等形式接收来自用户的输入。如果它不能转换为正确的类型,那么它就是来自用户的无效输入。您不会希望输入必须被神奇地推导出来。

string Str1 = textBox1.Text.Trim();
string Str2 = textBox2.Text.Trim();
double Num1,num2;
bool isNum1 = double.TryParse(Str1, out Num1);
bool isNum2 = double.TryParse(Str2, out Num2);
if (isNum1 && isNum2)
MessageBox.Show((isNum1 + isNum2).ToString());
else
MessageBox.Show( Str1 + Str2);

查看http://www.yoda.arachsys.com/csharp/miscutil/MiscUtil库。它包含一些非常聪明的表达式树的东西,允许操作符与泛型。它不会完全按照你想要的方式工作(正如其他人所说,你不能约束类型有操作符),但它应该完全按照你想要的方式工作。

我不知道它是如何处理添加不同的类型在一起,虽然我没有尝试过。

我认为这将需要一些处理之前的值按顺序与String之类的东西。解析,Int。解析等…

先按复杂度排序,因为1将转换为字符串,而x不会转换为整数或浮点数。

正式将我的回答更改为与评论相同…

我最好的建议是允许用户选择什么类型来解释数据,并根据用户的意思传递给适当的函数,有太多的方法来解释字符串来知道用户的意图是什么,代码处理逻辑没有意图。