C#验证属性和小数

C#验证属性和小数,c#,validation,C#,Validation,我正在编写一个验证属性: public class MyAttribute : ValidationAttribute { public override bool IsValid(object aValue) { } } 但我丢失了最低有效位,因为十进制是作为对象传递的。例如: (object)0.00 0 //I need 0.00 (object)1.00 1 (object)1.23 1.23 (object)1.230 1.23 //I need

我正在编写一个验证属性:

public class MyAttribute : ValidationAttribute
{
    public override bool IsValid(object aValue)
    {

    }
}
但我丢失了最低有效位,因为十进制是作为对象传递的。例如:

(object)0.00
0    //I need 0.00
(object)1.00
1
(object)1.23
1.23
(object)1.230
1.23   //I need 1.230
由于我正在根据提供的精确十进制值进行验证,即1.230与1.23不同,尽管在数学上相同,但出于我的目的,它们是不同的


在编写验证属性时,是否有任何方法可以获取原始的十进制值?

您无法基于传递的
十进制值进行此类验证。十进制
1.23
1.230
(故事结束)相同,无法确定差异


您需要更改验证以接受
字符串

如果您将十进制作为对象传入,则它将保持为十进制。请注意,对于演示2,我如何将其转换为字符串,并测试小数点后的长度

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TestApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            decimal demo1 = 1.2311M;
            decimal demo2 = 1.2300M;
            decimal demo3 = 1.00M;
            decimal demo4 = 1M;

            if (IsValid(demo1))
            {
                Console.WriteLine(ValueKeptZero(demo1));
            }

            if (IsValid(demo2))
            {
                Console.WriteLine(ValueKeptZero(demo2));
            }

            if (IsValid(demo3))
            {
                Console.WriteLine(ValueKeptZero(demo3));
            }

            if (IsValid(demo4))
            {
                Console.WriteLine(ValueKeptZero(demo4));
            }

            Console.ReadLine();
        }

        static bool IsValid(object value)
        {

            if (!(value.GetType() == typeof(decimal)))
                return false;

            decimal tmp = (decimal)value;

            if(tmp == 1.23M)
            {
                string test = tmp.ToString();

                if(test.Substring(test.IndexOf(".") + 1).Length != 4)
                {
                    return false;
                }

            }

            return true;

        }

        static decimal ValueKeptZero(object value)
        {
            return (decimal)value;
        }

    }
}

有什么理由不能使用泛型吗?对象总是一个数字吗?泛型在这里有什么帮助?IsValid()是否始终提供对象?我会很高兴有一个解决方案,该属性只能应用于十进制属性,因此始终具有say IsValid(decomal aValue),但我不认为这是怎么可能的?十进制是对象。。。我想我想说的是,如果你能解释一下为什么
1.23!=1.230
在您的情况下,我们可以更好地帮助您,因为就小数而言,
1.23==1.230
@muckeypock是的,我可以使用的是有效的(十进制值)但是我正在尝试使用ValidationAttribute,以便它可以根据需要用作属性上的注释。您能给我演示一个使用传递字符串的ValidationAttribute的示例吗?这也是同样的问题,我猜最低有效数字在转换为字符串的过程中会丢失?@我所有的单元测试都在默默地截断零,但当我调整它以使用x.xxM符号时,一切都很好。当我期望它们时,我现在有了零。