C# 如何在不丢失任何数据的情况下在两种(数字)数据类型之间进行转换?
我需要在各种类型(decimal、int32、int64等)之间进行转换,但我希望确保没有丢失任何数据。我发现普通的C# 如何在不丢失任何数据的情况下在两种(数字)数据类型之间进行转换?,c#,.net,C#,.net,我需要在各种类型(decimal、int32、int64等)之间进行转换,但我希望确保没有丢失任何数据。我发现普通的Convert方法(包括转换)会在没有警告的情况下截断数据 decimal d = 1.5; int i = (int)d; // i == 1 我想知道是否有convert或TryConvert方法,如果转换正在删除数据,它将抛出或返回false。我怎样才能做到这一点 如果可能的话,我希望在一般意义上这样做,因此我可以在给定两个Type对象和一个object实例(其中运行时类型
Convert
方法(包括转换)会在没有警告的情况下截断数据
decimal d = 1.5;
int i = (int)d;
// i == 1
我想知道是否有convert或TryConvert方法,如果转换正在删除数据,它将抛出或返回false。我怎样才能做到这一点
如果可能的话,我希望在一般意义上这样做,因此我可以在给定两个Type
对象和一个object
实例(其中运行时类型是convertFrom-Type)的情况下完成这一切。像这样:
object ConvertExact(object convertFromValue, Type convertToType)
{
if ( ** conversion not possible, or lossy ** )
throw new InvalidCastException();
// return converted object
}
与类似,但这里的数字被截断。这个怎么样:
using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine(ConvertExact(2.0, typeof(int)));
Console.WriteLine(ConvertExact(2.5, typeof(int)));
}
static object ConvertExact(object convertFromValue, Type convertToType)
{
object candidate = Convert.ChangeType(convertFromValue,
convertToType);
object reverse = Convert.ChangeType(candidate,
convertFromValue.GetType());
if (!convertFromValue.Equals(reverse))
{
throw new InvalidCastException();
}
return candidate;
}
}
请注意,这并不是完美的-例如,它将很高兴地将2.000m和2.00m转换为2,尽管这样会丢失信息(精度)。不过,它并没有失去任何震级,这对您来说已经足够好了。谢谢!这一个直接进入代码段库;)