我有一個基於預定義條件(OperatorType
和比較值)的業務邏輯,驗證它是真或假。這裏的問題是值是「鍵入」,並與運算符(大/小/等)等。運算符的通用值和類型比較器
如果ValueType
是整數,那麼值和比較值需要先轉換爲Integer
,然後再根據OperatorType
做比較。
我想知道如果我能有一個通用功能,傳球CompareValue
,Value
,ValueType
,OperatorType
並返回真/假。
using System;
using System.Collections.Generic;
namespace Test
{
class Program
{
static void Main(string[] args)
{
var compare1 = 3;
var foo1 = new Foo { Value = "2", OperatorType = OperatorTypes.GreaterOrEqual, ValueType = ValueTypes.Long };
//compare compare1 and foo1.Value, output should be false (2 < 3)
var compare2 = true;
var foo2 = new Foo { Value = "True", OperatorType = OperatorTypes.Equal, ValueType = ValueTypes.Bool };
//compare compare2 and foo2.Value, output should be true (true = true)
var compare3 = DateTime.Parse("2013-03-19 15:00");
var foo3 = new Foo { Value = "2013-03-19 16:00", OperatorType = OperatorTypes.Less, ValueType = ValueTypes.Date };
//compare compare3 and foo3.Value, output should be false (2013-03-19 16:00 < 2013-03-19 15:00)
}
}
public enum OperatorTypes : uint
{
Equal = 1,
Greater = 2,
GreaterOrEqual = 3,
Less = 4,
LessOrEqual = 5
}
public enum ValueTypes : uint
{
None = 0,
Integer = 1,
Long = 2,
Numeric = 3,
Date = 4,
Text = 5,
Bool = 6
}
class Foo
{
public string Value { get; set; }
public ValueTypes ValueType { get; set; }
public OperatorTypes OperatorType { get; set; }
}
}
這是什麼問題?到**編輯**是的,你可以編寫這樣的功能。你有什麼嘗試? – sehe 2013-03-19 11:35:12
@sehe對不起,我更新了我的問題。我想知道是否可以有一個通用函數,傳遞CompareValue,Value,ValueType,OperatorType並返回true/false。 – James 2013-03-19 11:37:58
@sehe,我試着用新的比較器,但它是一個基類沒有實現。我嘗試基於ValueType的Convert.ChangeType,但它仍然錯過了比較的最後一步。 –
James
2013-03-19 11:48:29