我目前正在开发批准路由WCF服务,该服务允许用户创建“规则”,以确定如何路由请求。通过将Request类的“ObjectToEvaluate”属性与“Rule”类的“ObjectToEvaluate”属性进行比较来确定路由。 “UnitOfMeasurement”枚举确定如何为每个类强制转换“ObjectToEvaluate”属性。
public enum UnitOfMeasurement
{
Currency = 1,
Numeric = 2,
Special = 3,
Text = 4,
}
public class Request
{
public object ObjectToEvaluate { get; set; }
}
public class Rule
{
public object ObjectToEvaluate { get; set; }
public virtual void ExecuteRule()
{
//logic to see if it passes the rule condition
}
}
使用“UnitOfMeasurement”枚举实现方法来强制转换“ObjectToEvaluate”属性的最佳方法是什么?
答案 0 :(得分:5)
使用隐式类型运算符来检查枚举的值。这样,调用者可以透明地将对象分配给您想要表示它们的类型。例如:
public class CastableObject {
private UnitOfMeasurement eUnit; // Assign this somehow
public static implicit operator int(CastableObject obj)
{
if (obj.eUnit != UnitOfMeasurement.Numeric)
{
throw new InvalidCastException("Mismatched unit of measurement");
}
// return the numeric value
}
// Create other cast operators for the other unit types
}
答案 1 :(得分:1)
你从哪里获得计量单位?我可以看到枚举,但我没有在API的其他地方看到它的任何引用。
假设你从某个地方获得它,最简单的解决方案可能是一个switch语句。这有点难看,但是:
我仍然不完全相信我理解这个问题的所有内容 - 特别是因为你没有解释在投射之后其他对象会用于什么。
答案 2 :(得分:1)
计量单位枚举包含在批准路由服务中。要详细说明Rule类,它将用作所有其他类型规则的基类。它基于NxBRE业务规则引擎NxBRE Home page的流引擎。
以下是LessThanRule类的示例(我修改了原始问题以反映正确的功能):
public class LessThanRule : Rule
{
private bool m_Result = false;
private object m_ObjectToCompare = null;
private object m_ObjectToEvaluate = null;
public bool Result
{
get { return this.m_Result; }
}
public object ObjectToCompare
{
get { return this.m_ObjectToCompare; }
set { this.m_ObjectToCompare = value; }
}
public object ObjectToEvaluate
{
get { return this.m_ObjectToEvaluate; }
set { this.m_ObjectToEvaluate = value; }
}
public override void ExecuteRule()
{
if (((IComparable)this.m_ObjectToEvaluate).CompareTo(this.m_ObjectToCompare) < 0)
this.m_Result = true;
}
}
希望这有助于......