C# 使用动态对象从方法返回不同的类型

C# 使用动态对象从方法返回不同的类型,c#,.net,dynamicobject,C#,.net,Dynamicobject,如果需要从其他项目测试非公共属性,Microsoft单元测试向导将创建访问器对象。在我的单元测试中,我创建了helper函数,这样我就不会在每个单元测试方法中重复相同的代码。目前,我有两个几乎相同的测试,除了一个采用标准公共对象,另一个采用访问器版本。由于访问器基于标准版本,我应该能够有一个功能 我假设我可以使用泛型来完成一个简单的转换。但当我发现这需要做更多的工作,包括更新底层对象。当我询问是否存在其他方法时,这一点得到了证实。有人建议。我不熟悉动态对象,有人能举个例子,让我有一个共享函数,并

如果需要从其他项目测试非公共属性,Microsoft单元测试向导将创建访问器对象。在我的单元测试中,我创建了helper函数,这样我就不会在每个单元测试方法中重复相同的代码。目前,我有两个几乎相同的测试,除了一个采用标准公共对象,另一个采用访问器版本。由于访问器基于标准版本,我应该能够有一个功能

我假设我可以使用泛型来完成一个简单的转换。但当我发现这需要做更多的工作,包括更新底层对象。当我询问是否存在其他方法时,这一点得到了证实。有人建议。我不熟悉动态对象,有人能举个例子,让我有一个共享函数,并在运行时确定对象吗

以下是现有的两个功能:

// Common function to create a new test record with standard Account object
internal static Account CreateAccount(bool saveToDatabase)
{
    DateTime created = DateTime.Now;
    string createdBy = _testUserName;

    Account account = new Account(created, createdBy);

    account.Notes = Utilities.RandomString(1000);

    if (saveToDatabase)
        account.Create();
}

// Common function to create a new test record with Account_Accessor
internal static Account_Accessor CreateAccount(bool saveToDatabase)
{
    DateTime created = DateTime.Now;
    string createdBy = _testUserName;

    Account_Accessor account = new Account_Accessor(created, createdBy);

    account.Notes = Utilities.RandomString(1000);

    if (saveToDatabase)
        account.Create();
}
我有24个这样的单元测试,实际对象平均有10个属性,我简化了这里的示例

下面是单元测试API创建的访问器代码(同样,为了简化示例,我对其进行了简化):

使用Microsoft.VisualStudio.TestTools.UnitTesting;
使用制度;
使用System.Collections.ObjectModel;
使用系统数据;
名称空间NameHere.Bll
{
[隐藏(“NameHere.Bll.Account”)]
公共类帐户\u访问器:ProjectBase\u访问器
{
受保护的静态PrivateType m_PrivateType;
公共帐户访问器(PrivateObject值);
[阴影(“。ctor@2")]
公共帐户访问器(创建日期时间,创建字符串);
[阴影(“_注释”)]
公共字符串_notes{get;set;}
公共静态帐户\访问器AttachShadow(对象值);
[阴影(”Create@0")]
公共覆盖void Create();
}
}
使用Microsoft.VisualStudio.TestTools.UnitTesting;
使用制度;
使用系统组件模型;
使用System.Linq.Expressions;
名称空间NameHere.Bll
{
[隐藏(“NameHere.Bll.ProjectBase`1”)]
公共类ProjectBase\u访问器:BaseShadow,INotifyPropertyChanged
{
受保护的静态PrivateType m_PrivateType;
公共项目库访问器(PrivateObject值);
[阴影(“创建”)]
已创建公共日期时间{get;set;}
公共静态私有类型ShadowedType{get;}
[阴影(“添加_PropertyChanged@1")]
public void add_PropertyChanged(propertychangedventhadler值);
公共静态项目库\访问器AttachShadow(对象值);
[阴影(”Create@0")]
公共虚拟void Create();
}
}

这里是我第一次尝试使用动态对象实现共享功能。它返回Account或Account_访问器,具体取决于布尔值useAccessor参数:

internal static dynamic CreateAccount(bool saveToDatabase, bool useAccessor)
{
    DateTime created = DateTime.Now;
    string createdBy = _testUserName;
    dynamic account;

    if (useAccessor)
         account = new Account_Accessor(created, createdBy);
    else
         account = new Account(created, createdBy);    

    account.Notes = Utilities.RandomString(1000);

    if (saveToDatabase)
        account.Create();
}
对此方法有何建议或意见

internal static dynamic CreateAccount(bool saveToDatabase, bool useAccessor)
{
    DateTime created = DateTime.Now;
    string createdBy = _testUserName;
    dynamic account;

    if (useAccessor)
         account = new Account_Accessor(created, createdBy);
    else
         account = new Account(created, createdBy);    

    account.Notes = Utilities.RandomString(1000);

    if (saveToDatabase)
        account.Create();
}