Попытка реализовать DecimalAboveThresholdAttribute с проблемами - PullRequest
0 голосов
/ 03 ноября 2011

Я пытаюсь реализовать что-то похожее на 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.

1 Ответ

2 голосов
/ 03 ноября 2011

Вы не можете использовать десятичные дроби в качестве параметров атрибута. Это встроенное ограничение в атрибутах .NET. Доступные типы параметров можно найти на MSDN . Так что это не будет работать с десятичной и 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.")]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...