【问题标题】:Object As Interface对象即接口
【发布时间】:2010-08-25 22:16:56
【问题描述】:

我有一个实现接口的对象,然后我使用反射找到该对象。如何将对象投射到接口中,然后将其放入 List<IInterface> 中?

【问题讨论】:

  • 发布一些代码并指出你被卡住的地方。
  • 哦讽刺:问题标题就是答案正是

标签: c# object interface casting type-conversion


【解决方案1】:

如果对象是实现接口的类型,则不需要强制转换。

IMyBehaviour subject = myObject;

如果myObject 的类型只是Object,那么你需要强制转换。我会这样做:

IMyBehaviour subject = myObject as IMyBehaviour;

如果myObject 没有实现给定的接口,你最终会得到subjectnull。在将其放入列表之前,您可能需要对其进行检查。

【讨论】:

    【解决方案2】:
    public interface IFoo { }
    public class Foo : IFoo {}
    
    private SomeMethod(object obj)
    {
        var list = new List<IFoo>();
        var foo = obj as IFoo;
    
        if (foo != null)
        {
            list.Add(foo);
        }
    }
    

    【讨论】:

    • 或者如果你有一个 foo 类型的列表 foo: var list = new List(foo.ToArray());
    【解决方案3】:

    这是一个函数

    将对象投射到接口中,然后将其放入列表中

    public void CastAndAdd(object objThatImplementsMyInterface, IList<IMyInterface> theList) 
    {
        theList.Add((IMyInterface)objThatImplementsMyInterface);
    }
    

    我的意思是,如果您已经找到该对象并拥有该列表,那么这是非常基本的。只需将IMyInterface 替换为您使用的任何接口即可。

    或根据您的特定代码对此进行概括。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-10
      • 1970-01-01
      • 2011-06-27
      • 2016-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多