有没有办法知道返回的对象是什么?

时间:2013-08-07 01:31:56

标签: c# object return layer

我有一个帮助程序类,我用它在程序的各层之间传递。此类的一个功能是,如果底层有错误,它将返回。它还通过层传回与例程关联的数据(即,返回数据库表,字符串,整数等...)。目前我通过对象类型添加数据。并且被调用者例程需要知道返回的数据类型。 我的问题是,有没有办法返回对象,以及它是什么类型的数据?以及如何存储类型描述符?

目前这是如何实现的:

这是较低级别的示例(对于没有错误的db例程):

      return new MyHelper()
            .AndAddObjectToReturn(rep)
            .AndHasNoErrors();

这会冒泡到被调用者代码:

        .....
        if (contactidHelped.HaveNoErrors())
        {
            repContact contact = (repContact) contactidHelped.GetAttachedDataObject();
            ....
         }

我想要做的是在被调用者例程中,如果数据类型是无知的,并且执行如下代码:

        .....
        if (contactidHelped.HaveNoErrors())
        {
            repContact contact = contactidHelped.GetAttachedDataObject();
            ....
         }

这样预期的对象就是它所需要的。

2 个答案:

答案 0 :(得分:0)

据我所知,你无法以简单的方式做到这一点。我能想到的实现类似行为的方法是在你的助手类中使用类型约束。

创建一个基本Helper类(比如说MyHelper),它有一个虚拟的GetAttachedDataObject返回对象类型,同时派生另一个类 - MyHelper<T>,它有一个方法GetAttachedData<T>返回类型为T的值。

初始化/实例化帮助程序时,实例化强类型MyHelper<T>。在调用者处,您可以将MyHelper强制转换为所需的MyHelper<T>,并调用GetAttachedData而不是GetAttachedDataObject。当然,您可以进一步调整以满足您的需求。

但这也不理想 - 它仍然要求你在某些时候进行铸造,但我相信它可以减少铸造的需要。

答案 1 :(得分:0)

您可以通过简单地将其存储为对象来传递GetAttachedDataObject(),例如

var attachedDataObject = contactidHelped.GetAttachedDataObject();

然后,当您需要访问任何给定对象的特定属性或方法时,只需检查类型:

if (attachedDataObject is repContact) {
    // your code here
}

但是,我建议您查看Interfaces的工作原理,或许它更适合您的需求。