gpt4 book ai didi

c# - 在 C# 中实现多参数泛型方法

转载 作者:太空宇宙 更新时间:2023-11-03 12:22:31 24 4
gpt4 key购买 nike

我正在尝试学习泛型,但有些事情我无法理解。

下面是正在使用的接口(interface)和类:

public interface IQueryExecutor
{
T ExecuteQuery<T>(IQuery<T> query);

T ExecuteQuery<T, T1>(IQuery<T, T1> query);
}

public interface IQuery<out T>
{
T Execute();
}

public class StringQuery : IQuery<string>
{
public string Execute()
{
return "String query executed";
}
}

public interface IQuery<out T, in T1>
{
T Execute(T1 input);
}

public class ListQuery : IQuery<List<string>, string>
{
public List<string> Execute(string input)
{
return new List<string>() { input };
}
}

当我尝试在queryExecutor中实现第二个方法时出现问题:

public class QueryExecutor : IQueryExecutor
{
public T ExecuteQuery<T>(IQuery<T> query)
{
return query.Execute();
}

public T ExecuteQuery<T, T1>(IQuery<T, T1> query)
{
return query.Execute(T1 input);
}
}

我想将 T1 作为参数传递给方法实现,但这是不可能的(可以通过使用像 Autofac 这样的 IoC 容器来完成,但这不是我想要的)。帮助!一定有一些非常基础的泛型我不明白。

所以问题是,我该如何实现:

public T ExecuteQuery<T, T1>(IQuery<T, T1> query)
{
return ????
}

最佳答案

你需要在某处传递输入参数。最好的选择是扩展方法签名以接受这样的输入参数:

public interface IQueryExecutor
{
T ExecuteQuery<T>(IQuery<T> query);

T ExecuteQuery<T, T1>(IQuery<T, T1> query, T1 input);
}

第二个选项是在构造函数中删除第二个版本的 IQuery 接口(interface)传递输入参数。

public class ListQuery : IQuery<List<string>>
{
private string _input;

public ListQuery(string input)
{
_input= input;
}
public List<string> Execute()
{
return new List<string>() { _input };
}
}

关于c# - 在 C# 中实现多参数泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46623884/

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