c# - चर-बारी को केवल रन-टाइम पर जाना जाता है?





(3)


आप गतिशील हो सकते हैं; उदाहरण के लिए:

using System;

namespace TypeCaster
{
    class Program
    {
        internal static void Main(string[] args)
        {
            Parent p = new Parent() { name = "I am the parent", type = "TypeCaster.ChildA" };
            dynamic a = Convert.ChangeType(new ChildA(p.name), Type.GetType(p.type));
            Console.WriteLine(a.Name);

            p.type = "TypeCaster.ChildB";
            dynamic b = Convert.ChangeType(new ChildB(p.name), Type.GetType(p.type));
            Console.WriteLine(b.Name);
        }
    }

    internal class Parent
    {
        internal string type { get; set; }
        internal string name { get; set; }

        internal Parent() { }
    }

    internal class ChildA : Parent
    {
        internal ChildA(string name)
        {
            base.name = name + " in A";
        }

        public string Name
        {
            get { return base.name; }
        }
    }

    internal class ChildB : Parent
    {
        internal ChildB(string name)
        {
            base.name = name + " in B";
        }

        public string Name
        {
            get { return base.name; }
        }
    }
}
foreach (var filter in filters)
{
    var filterType = typeof(Filters);
    var method = filterType.GetMethod(filter, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Static);
    if (method != null)
    {
        var parameters = method.GetParameters();
        Type paramType = parameters[0].ParameterType;
        value = (string)method.Invoke(null, new[] { value });
    }
}

मैं paramType करने के लिए value कैसे लगा सकता हूं? value एक string , paramType शायद int , string , या शायद float जैसे मूल प्रकार होंगे। यदि कोई रूपांतरण संभव नहीं है तो मैं अपवाद फेंकने के साथ शांत हूं।




आप जिस प्रकार का उपयोग कर रहे हैं, वह सभी IConvertible लागू कर रहे हैं। जैसे आप ChangeType उपयोग कर सकते हैं।

 value = Convert.ChangeType(method.Invoke(null, new[] { value }), paramType);



स्वीकार्य उत्तर मेरे प्रोजेक्ट में मेरे लिए काम नहीं करता था। मैं http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/95055cdc-60f8-4c22-8270-ab5f9870270a/ मिले कोड का उपयोग करके समाप्त हुआ।

    public static bool IsInPolygon(Point[] poly, Point p)
    {
        Point p1, p2;


        bool inside = false;


        if (poly.Length < 3)
        {
            return inside;
        }


        var oldPoint = new Point(
            poly[poly.Length - 1].X, poly[poly.Length - 1].Y);


        for (int i = 0; i < poly.Length; i++)
        {
            var newPoint = new Point(poly[i].X, poly[i].Y);


            if (newPoint.X > oldPoint.X)
            {
                p1 = oldPoint;

                p2 = newPoint;
            }

            else
            {
                p1 = newPoint;

                p2 = oldPoint;
            }


            if ((newPoint.X < p.X) == (p.X <= oldPoint.X)
                && (p.Y - (long) p1.Y)*(p2.X - p1.X)
                < (p2.Y - (long) p1.Y)*(p.X - p1.X))
            {
                inside = !inside;
            }


            oldPoint = newPoint;
        }


        return inside;
    }





c#  

c#