gpt4 book ai didi

c# - 如何创建匿名类以便将其传递给通用构造函数?

转载 作者:太空宇宙 更新时间:2023-11-03 21:08:11 25 4
gpt4 key购买 nike

我正在将非通用存储库的测试移植到通用存储库。而不是使用 Repo<MyType> , 我想用 Repo<object> 测试更抽象的方法什么的。

我尝试使用匿名实例,但没有成功:

    [Test]
public void AddToRepoIncrementsByOne()
{
IFile file = new FileFake();
IByteSerializer<object> serializer = new SerializerObjectFake();
repo = new WriteableFileRepository<object>(file, serializer);

var obj = new { Name = "test" };
repo.Add(obj);

Assert.True(repo.Items.Count() == 1);
Assert.AreEqual(repo.Items.Single().Name, obj.Nome);
//----------------------------------^^^^
//-------------------compiler error here
}

我试图从对象中推断出类引用,但也没有成功:

        var obj = new { Nome = "teste" };

Type T = obj.GetType();

IArquivo arquivo = new ArquivoFake();
IByteSerializer<T> serializer = new SerializerObjectFake();
//--------------^
repo = new RepositórioArquivoEscrita<T>(arquivo, serializer);

我该如何解决这个问题?我并不要求使用匿名对象,我只是认为这是一种让我的测试运行的实用方法,但如果这不是一个好的设计,我肯定可以采用其他方式。

最佳答案

匿名类型的技巧是通过示例进行转换;让编译器利用类型推断为您完成工作:

public static T CastByExample(this object obj, T prototype) => 
(T)obj;

现在您需要做的就是:

Assert.AreEqual(repo.Items.Single().CastByExample(obj).Name, obj.Name);

关于c# - 如何创建匿名类以便将其传递给通用构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39793704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com