方法输入参数为命名空间

时间:2014-05-29 16:45:42

标签: c# .net .net-3.5

我们说我有这些对象

namespace MyResponses.Interfaces.IInterface1
{
    partial class exResponse
    {
        Object1 myObj; 
        bool flag;
    }
}

namespace MyResponses.Interfaces.IInterface2
{
    partial class exResponse
    {
        Object2 myObj;
        bool flag;
    }
}

namespace MyResponses.Interfaces.IInterface3
{
    partial class exResponse
    {
        Object3 myObj; 
        bool flag;
    }
}

我需要一种方法来检查所有exResponse对象中的标志。 此方法将在MyResponses.Interfaces命名空间内接收一个对象。

类似的东西:

bool CheckFlagInResponse(MyResponses.Interfaces response, Type responseType)
{
    return (response as responseType).flag;
}

我会这样称呼它?

CheckFlagInResponse(myExResponse, myExResponse.GetType())

1 个答案:

答案 0 :(得分:2)

听起来这基本上是破坏了设计,如果你有非常相似的类型都有相同的成员(甚至相同的简单名称),但它们之间没有类型关系。

如果这是生成的代码并且类型都在生成的代码中声明为partial类型,那么您可以通过使它们全部实现接口来解决这个问题:

public interface IFlag
{
    bool Flag { get; }
}

namespace MyResponses.Interfaces.IInterface1
{
    public partial class ExResponse : IFlag {}
}

namespace MyResponses.Interfaces.IInterface2
{
    public partial class ExResponse : IFlag {}
}

// etc

然后你可以使用IFlag来获取需要访问标志的任何内容 - 所有响应类都将实现该接口。

或者,如果您真的必须(如果您正在使用.NET 4,现在它听起来像你不是),您可以使用动态类型:

bool CheckFlagInResponse(dynamic response)
{
    return response.flag;
}