أفضل طريقة لتحديد كيفية إلقاء كائن إلى نوع مناسب في C#؟

StackOverflow https://stackoverflow.com/questions/209354

  •  03-07-2019
  •  | 
  •  

سؤال

أقوم حاليًا بتطوير خدمة WCF لتوجيه الموافقة والتي ستسمح للمستخدم بإنشاء "قواعد" تحدد كيفية توجيه الطلب. يتم تحديد المسار من خلال مقارنة خاصية "ObjectToevaluation" لفئة الطلب مقابل خاصية "ObjectToevaluate" لفئة "القاعدة". يحدد التعداد "UnitofMeasurement" كيفية إلقاء خاصية "ObjectToEvaluer" لكل فئة.

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
    }
}

ما هي أفضل طريقة لتنفيذ طريقة إلقاء خاصية "ObjectToevaluation" باستخدام تعداد "UnitofMeasurement"؟

هل كانت مفيدة؟

المحلول

استخدم مشغل نوع ضمني يتحقق من قيمة التعداد. وبهذه الطريقة ، يمكن للمتصلين تعيين الكائنات بشفافية إلى الأنواع التي تريد تمثيلها لها. على سبيل المثال:

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
}

نصائح أخرى

من أين تحصل على وحدة القياس؟ أستطيع أن أرى التعداد ، لكنني لا أرى أي إشارة إليها في مكان آخر في واجهة برمجة التطبيقات.

على افتراض أنك تحصل عليه من مكان ما ، فقد يكون الحل الأسهل عبارة عن بيان تبديل. إنه قبيح بعض الشيء ، لكن:

  • ستعمل
  • من السهل الفهم
  • سيكون سريعًا

ما زلت غير مقتنع تمامًا بأنني أفهم كل شيء عن السؤال - خاصةً أنك لم تشرح ما الذي سيتم استخدام الأشياء الأخرى بعد الصب.

توجد وحدة تعداد القياس ضمن خدمة توجيه الموافقة. لتوضيح المزيد على فئة القاعدة ، يتم استخدامه كفئة أساسية لجميع الأنواع الأخرى من القواعد. يعتمد بشكل فضفاض على محرك تدفق محرك قاعدة الأعمال NXBRE الصفحة الرئيسية nxbre.

فيما يلي مثال على فئة 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;
    }
}

أتمنى أن يساعدك هذا....

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top