我想在界面中使用Func - 泛型。基于输入我想处理操作。但不知何故,我无法获得该功能的输入。
1)我应该将Func <>作为参数传递的用例是什么? 2)返回Fuc <>作为返回对象有什么好处?
我创建了一个界面。
public interface IAutoFacDemo
{
Task<string> GetAsync(Func<string, Task<string>> concat, string input);
}
其中有一个具体的实现
public class BusConcat : IAutoFacDemo
{
#region Implementation of IAutoFacDemo
public BusConcat()
{
}
// ??我无法从程序中提取输入字符串“dinesh”//我将其作为lambda表达式传递
public async Task<string> GetAsync(Func<string, Task<string>> concat, string input)
{
var v = Function(concat, input).Result;
return (v);
}
private static async Task<string> Function(Func<string, Task<string>> bus, string input)
{
var v = await bus(Process("").Result).ConfigureAwait(false);
return v;
}
private static async Task<string> Process(string input)
{
return Task.FromResult( ":").Result;
}
#endregion
}
然后使用接口我为Autofac模块加载创建了另一个接口
public interface IFactory
{
Task<string> GetValue(Func<string,Task<string>> fn,string input);
}
而从主要
static void Main(string[] args)
{
var scope = AutoFacContainerConfig.RegisterLifetimeScope();
{
using (var resolveEntity = scope.BeginLifetimeScope())
{
var names =new List<string>{"dinesh","tripathi","avenue"};
var factory = resolveEntity.Resolve<IFactory>();
Console.WriteLine(factory.GetType().ToString());
var x = string.Empty;
var v=(x.Insert(0, names.First(xc => xc.Contains("dinesh"))));
// I am trying to call the Func<string,Task<string>> where i want to pass
//the list if it contains "dinesh" to the function and based on the string
//it will process the function
var xx = factory.GetValue(async i=>i+await Task.FromResult(names.First(x1=>x1.Contains("dinesh"))),"Test").Result;
Console.WriteLine(xx);
}
}
}
我正在得到dinesh:测试作为输出,但我想在将字符串作为lambda值传递给Func时处理“dinesh”
大。得到它了 。在函数GetAsync中获取lambda值“dinesh”
我声明了字符串变量并在Concat上调用Invoke来获得结果。
string ret=string.empty
var retVal=concat.Invoke(ret).Result
从lambda表达式传递给我“dinesh”。
谢谢大家。 :)