【问题标题】:Is there a way to know what the returned object is?有没有办法知道返回的对象是什么?
【发布时间】:2013-08-08 05:29:49
【问题描述】:

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

目前是这样实现的:

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

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

这会冒泡到执行此操作的被调用者代码:

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

我想做的是在被调用例程上,如果数据类型和代码如下所示:

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

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

【问题讨论】:

  • 这个怎么样? var contact = contactidHelped.GetAttachedDataObject();
  • 嗨..这将适用于字符串和整数,但我主要映射回类中的类型化属性。例如: newgroup.ProductTypeOfGroupItemLink = .... 定义为: public repProductTypes ProductTypeOfGroupItemLink { get;放; } .. 等等..

标签: c# object return layer


【解决方案1】:

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

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

当你初始化/实例化助手时,实例化一个强类型MyHelper<T>。在调用者处,您可以将 MyHelper 预先转换为您想要的 MyHelper<T> 并调用 GetAttachedData 而不是 GetAttachedDataObject。当然,您可以进一步调整以满足您的需求。

但这也不理想 - 它仍然需要您在某些时候进行强制转换,尽管我相信它可以减少强制转换的需求。

【讨论】:

    【解决方案2】:

    您可以传递GetAttachedDataObject(),只需将其存储为对象即可,例如

    var attachedDataObject = contactidHelped.GetAttachedDataObject();
    

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

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

    不过,我建议您检查一下Interfaces 的工作原理,也许它会更适合您的需求。

    【讨论】: