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

时间:2011-10-20 17:00:39

标签: c# visual-studio generics

例如,如果两个值都是int类型,则会添加它们....即2+2=4

如果两个值都是float ....即2.2+2.3=4.5 或者如果一个值是字符串而第二个是int ...即1 + Pak=1Pak

我们将使用tfwo文本框

从用户那里获取这两个值

6 个答案:

答案 0 :(得分:2)

这是实现目标的一种方式。无需转换为字符串而不是转换为数字。

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

答案 1 :(得分:1)

你无法使用泛型来做到这一点。无论如何,您都会从文本框中收到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),就无法使用泛型。

答案 2 :(得分:1)

你不会,泛型不能以某种方式限制算术运算符(或连接)。您需要创建重载。

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

当然,您仍然需要确定如何准确地解析数据。源是TextBox,数据本身就是字符串。您必须确定它应该是哪种类型的号码,如果有的话。

如果为实际应用程序执行此操作,则不应该出现此问题。您的文本框应该预期以整数,小数或字符串等形式接收来自用户的输入。如果它不能转换为正确的类型,则它是来自您的无效输入用户。你不希望输入必须神奇地推断出来。

答案 3 :(得分:0)

我认为需要先处理一些值,比如String.PArse,Int.Parse等等......

首先按顺序排列它们,因为1会转换为字符串,但x不会转换为整数或浮点数。

正式将我的回答改为评论......

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

我不知道它是如何处理添加不同类型的,但我没试过。