动态转换类型对象到类型(某些类)

时间:2013-09-21 20:24:38

标签: c# object types casting type-conversion

我希望我的一些方法采用Object并将其转换为可用类型:

*简单示例

public void PostAction (object act){
    object Action = (act.GetType) act;
    string ActionName = Action.PostName;
}

通过浏览互联网和Stackoverflow,我发现只有在没有类型的情况下调用对象方法的方法

public void PostAction (object act){
    Type t = act.GetType(); // myObject.GetType() would also work
    MethodInfo GetPostName = t.GetMethod("GetPostName");
    GetPostName.Invoke(act, null);
}

有更好的方法吗?我可以将一个对象转换为它的类型??

2 个答案:

答案 0 :(得分:6)

您可以使用dynamic

public void PostAction (object act){
    ((dynamic)act).GetPostName();
}

但我会更进一步改变方法:

  1. 使用GetPostName方法声明接口:

    public interface IMyInterface
    {
        void GetPostName();
    }
    
  2. 在班级中实施界面

  3. 更改PostAction方法以取IMyInterface参数:

    public void PostAction(IMyInterface act)
    
  4. 使用带PostAction方法的接口方法:

    public void PostAction(IMyInterface act)
    {
        act.GetPostName();
    }
    
  5. 优点:

    • 会给你一个编译时类型安全
    • 会更快,因为不需要反射

答案 1 :(得分:2)

实际上,您应该从不使用反射来调用传入的对象的方法。 使用object作为方法的参数类型也不是最佳实践。 您通常希望您的代码是强类型的。

无论如何,如果您希望“object”作为参数的类型,只需将对象强制转换为接口或键入:

    public interface IMyInterface
    {
        string GetPostName();
    }

    public void PostAction(object actObject)
    {
        var action = actObject as IMyInterface;
        if (action != null)
        {
            var postName = action.GetPostName();
        }
    }

如果像这样进行转换,如果对象没有实现该接口,结果可以为null,这就是为什么你可能要检查null ...