例如,如果两个值都是int类型,则会添加它们....即2+2=4
如果两个值都是float ....即2.2+2.3=4.5
或者如果一个值是字符串而第二个是int ...即1 + Pak=1Pak
我们将使用tfwo文本框
从用户那里获取这两个值答案 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库。它包含一些非常聪明的表达式树的东西,允许运算符使用泛型。它不会按照你想要的方式工作(正如其他人所说,你不能限制类型来拥有运算符),但它应该完全符合你的要求。
我不知道它是如何处理添加不同类型的,但我没试过。