如何将父代转换为子代以调用C#中的右函数 - c#

我先使用C#/代码
我有家长班
abstract public class form_base {}
和几个不同的孩子的课。
这里之一

 public class form_Frais : form_base    {
}

我有一个所有form_base的视图,但是当我单击一个时,会打开一个通用模板。
我只需要在通过URL更改控制器/功能时根据子类型更改映射

然后在我的form_base
我有这个:

 public T Cast<T>(object o)
    {
        return (T)o;
    }

    public dynamic converttt(Type LeTyp)
    {
        MethodInfo castMethod = GetType().GetMethod("Cast").MakeGenericMethod(new[] { LeTyp });
        dynamic castedObject = castMethod.Invoke(Activator.CreateInstance(LeTyp), new object[] { this });
        return castedObject;
    }

我将项目分为两部分(引擎/网络),我的类在引擎中定义

我的问题是填写Web部件中所有form_base的列表。
我在控制器部分使用此功能

 public ActionResult demandeur()
    {
        object model;

            model = new {  formsList = (from f in CurrentDBContext.forms_base  select f).ToList().getCardModel(false) };
        }

        return View("demandeur", model);
    }

在网络中,我创建扩展方法(在引擎部分中看不到)
公共静态局部类扩展
{

    public static List<formListItem> getCardModel(this List<form_base> items, bool envalidation)
    {
        List<formListItem> model = new List<formListItem>();
        if (items != null && items.Count > 0)
        {
            foreach (var item in items)
            {
                Type LeTyp = item.GetType().BaseType;
                dynamic castedObject = item.converttt(LeTyp);//Pb here not good type : System.Data.Entity.DynamicProxies.form_Frais_353DEAA5...' ne contient pas de définition pour 'getCardModel''

                model.Add(castedObject.getCardModel(envalidation));
            }
        }
        return model;
    }

    public static formListItem getCardModelBase(this form_base f)
    {
        formListItem model = new formListItem();
        model.id = f.id;
        model.libelle = f.title;
        model.libelleType = f.formType.title;
        model.libelleStatut = f.StatutInterneLibelle;
        model.demandeur = f.demandeur.fullName;
        model.idtype = f.formType.id;
        return model;
    }
 public static formListItem getCardModel(this form_Frais form, bool envalidation)
    {
        formListItem model = ((form_base)form).getCardModelBase();
        model.URL = "/forms/NoteFrais/InitForm"; //The good URL
        model.envalidation = envalidation;
        return model;
    }
}

我尝试将所有内容放在扩展部分中,如下所示:

 public static T Cast<T>(object o)
    {
        return (T)o;
    }


    public static List<formListItem> getCardModel(this List<form_base> items, bool envalidation)
    {
        List<formListItem> model = new List<formListItem>();
        if (items != null && items.Count > 0)
        {
            foreach (var item in items)
            {
                Type LeTyp = item.GetType().BaseType;
                MethodInfo castMethod = item.GetType().BaseType.GetMethod("Cast").MakeGenericMethod(new[] { LeTyp });
                dynamic castedObject = castMethod.Invoke(null, new object[] { item });

                model.Add(castedObject.getCardModel(envalidation));
            }
        }
        return model;
    }

    public static formListItem getCardModelBase(this form_base f)
    {
        formListItem model = new formListItem();
        model.id = f.id;
        model.libelle = f.title;
        model.libelleType = f.formType.title;
        model.libelleStatut = f.StatutInterneLibelle;
        model.demandeur = f.demandeur.fullName;
        model.idtype = f.formType.id;
        return model;
    }

但是我在item.GetType()。BaseType.GetMethod(“ Cast”)。MakeGenericMethod(new [] {LeTyp});中有错误。导致GetMethod(“ Cast”)返回null

我所有的研究都来自here

更新

在简历中,在第一次尝试中,我遇到类型类返回dynamicproxy的问题...
在静态版本中,我找不到方法Cast ..

我尝试

 MethodInfo[] methodInfos = LeTyp.GetMethods(BindingFlags.Public | BindingFlags.Static);

但是我的数组是空的...那么我在静态版本中的问题将是如何正确保存我的Case函数???并在扩展方法中使用

更新3

我在静态模式下发现问题
我需要在note_frais类中添加Cast Cast函数
并使用它

 Type LeTyp = item.GetType().BaseType;
                //MethodInfo[] methodInfos = LeTyp.GetMethods(BindingFlags.Public | BindingFlags.Static);
                MethodInfo MI = LeTyp.GetMethod("Cast");//<T>.getMethod(cast)
                MI = MI.MakeGenericMethod(typeof(form_base));
                dynamic t = MI.Invoke(null, new object[] { item });

                model.Add(t.getCardModel(envalidation));

但是现在我在2部分中具有相同的pb:

//这里的PB不是很好的类型:System.Data.Entity.DynamicProxies.form_Frais_353DEAA5 ...'

谢谢你的帮助?我读了很多东西,但现在我完全迷路了。

参考方案

代替:

GetMethod("Cast")

...尝试此重载:

GetMethod("Cast", new Type[] { typeof(Object) })

更多观察...

Cast<T>form_base方法不是静态的。 (请参阅上文以获取此内容。)

form_base没有定义任何公共静态方法。

(附带说明,我不确定为什么将extensions类定义为partial。)

Cast<T>中的extensions方法是静态的,但不是扩展方法。

要获得此功能,可以在类型extensions上使用此重载:

typeof(extensions).GetMethod("Cast", BindingFlags.Public | BindingFlags.Static, null, new Type[] { typeof(Object) }, null)

如果确实在类Cast<T>中定义了extensions扩展方法:

public static partial class extensions {
    public static T Cast<T>(this form_base b, object o) {/*…*/}
}

...然后可以通过修改extensions参数以相同的重载方式在types上获取它:

typeof(extensions).GetMethod("Cast", BindingFlags.Public | BindingFlags.Static, null, new Type[] { typeof(form_base), typeof(Object) }, null)

Python 3运算符>>打印到文件 - python

我有以下Python代码编写项目的依赖文件。它可以在Python 2.x上正常工作,但是在使用Python 3进行测试时会报告错误。depend = None if not nmake: depend = open(".depend", "a") dependmak = open(".depend.mak&#…

无法解析Json响应 - php

我正在尝试解析一个包含产品类别的JSON文件,然后解析这些类别中的产品,并在div中显示它们。我的问题:虽然我可以获取类别,但我不知道如何索取产品(并将它们显示在类别下)。我的剧本:<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script> …

在xpath中选择多个条件 - php

我正在尝试使用来自高尔夫比赛的xml提要,以显示每个高尔夫球手在高尔夫球场上的位置。目前,我想展示符合两个条件的所有高尔夫球手(排在前25名,以及所有加拿大高尔夫球手)。这是xml提要的示例。<GolfDataFeed Type="Leaderboards" Timestamp="3/21/2012 9:18:09 PM&…

与哪些运算符>>兼容 - java

我这里没有什么代码int b=3; b=b >> 1; System.out.println(b); 它可以完美工作,但是当我将变量b更改为byte,short,float,double时,它包含错误,但是对于变量int和long来说,它可以完美工作,为什么它不能与其他变量一起工作? 参考方案 位移位运算符(例如>>)与任何整数类型兼…

使用javascript在客户端的列表视图中选择所有复选框 - javascript

我有一个列表视图,在标题中有一个复选框。如果标题复选框已选中/未选中,我想选择行中的所有复选框。如何在客户端实现此目标?这是ListView设计代码。<asp:ListView ID="lvTypes" runat="server" GroupPlaceholderID="groupPlaceHolde…