a
你从
-123
但是对于你刚开始的其他人
123
并得出结果
-
你需要像这样把123封起来
(-123)
using System;
using System.Linq;
public class Program
{
public static void Main()
{
int j = -123;
int a = j.ToString().Reverse().Aggregate(0, (y, x) => 10 * y + x - '0');
int b = -(123.ToString().Reverse().Aggregate(0, (y, x) => 10 * y + x - '0'));
int c = -123.ToString().Reverse().Aggregate(0, (y, x) => 10 * y + x - '0');
int d = -(123).ToString().Reverse().Aggregate(0, (y, x) => 10 * y + x - '0');
//Make -123 like line below.
int e = (-123).ToString().Reverse().Aggregate(0, (y, x) => 10 * y + x - '0');
Console.WriteLine($"{a} , {b} , {c} , {d}, {e}");
Console.ReadKey();
}
}
//OUTPUTS
//3207 , -321 , -321 , -321, 3207
编辑
我在上面回答了为什么你不能用这种方法得到正确的结果,但我没有回答如何才能实现。现在我同意你的看法;“这个没有很好的LINQ表达式”。然而我能够将它转换成一行可读性良好的代码,从而成为一个外观美观的扩展方法。
我确实看了问题下面的评论,并借用了Falco Alexander的评论
Math.Sign
if x < 0 return result * -1
索塔交易。
我还注意到了电流的一个问题
Aggregate
正在使用的函数,即它不支持小数。目前只是
int
double
也要添加小数点,我聚合了一个
string
; 但是我认为聚合一个字符串是一件坏事,因为我们只想执行尽可能少的字符串计算,只是做了一个简单的计算
new string
using System;
using System.Linq;
public class Program
{
public static void Main()
{
int j = -123;
int k = 123;
double l = -123.456;
double m = 123.456;
Console.WriteLine(j.Reverse());
Console.WriteLine(k.Reverse());
Console.WriteLine(l.Reverse());
Console.WriteLine(m.Reverse());
Console.ReadKey();
}
}
public static class Extensions
{
public static int Reverse(this int value)
{
return Math.Sign(value) * int.Parse(new string(Math.Abs(value).ToString().Reverse().ToArray()));
}
public static double Reverse(this double value)
{
return Math.Sign(value) * double.Parse(new string(Math.Abs(value).ToString().Reverse().ToArray()));
}
}
//OUTPUTS
//-321
//321
//-654.321
//654.321