0

小数で動作することを除いて、IntegerAboveThresholdAttribute に似たものを実装しようとしています。

これは、BusinessException として使用する私の実装です。

[DecimalAboveThreshold(typeof(BusinessException), 10000m, ErrorMessage = "Dollar Value must be 10000 or lower.")]

ただし、属性は定数式、typeof 式、または属性パラメーター型の配列作成式である必要があるというエラーが表示されます。これを修正できるかどうか疑問に思っていましたが、そうでない場合、同様のことを行うことは可能ですか?

DecimalAboveThresholdAttribute のソース コードは次のとおりです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CoreLib.Messaging;

namespace (*removed*)
{
public class DecimalBelowThresholdAttribute : BusinessValidationAttribute
{
    private decimal _Threshold;

    public DecimalBelowThresholdAttribute(Type exceptionToThrow, decimal threshold)
        : base(exceptionToThrow)
    {
        _Threshold = threshold;
    }

    protected override bool Validates(decimal value)
    {
        return (decimal)value < _Threshold;
    }
}

}

また、DateTimes でも​​これを行うことができるかどうかも知りたいです。

4

1 に答える 1

2

小数を属性パラメーターとして使用することはできません。これは、.NET 属性に組み込まれた制限です。使用可能なパラメーターの種類は、MSDNで確認できます。したがって、10 進数と DateTime では機能しません。回避策として (タイプセーフではありませんが) 文字列を使用できます。

public DecimalBelowThresholdAttribute(Type exceptionToThrow, string threshold)
        : base(exceptionToThrow)
    {
        _Threshold = decimal.Parse(threshold);
    }

使用法:

[DecimalAboveThreshold(typeof(BusinessException), "10000", ErrorMessage = "Dollar Value must be 10000 or lower.")]
于 2011-11-02T20:50:02.570 に答える