c#Func Delegate - 如何在泛型中传递值

问题描述 投票:-1回答:1

我想在界面中使用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”

c# generics
1个回答
0
投票

大。得到它了 。在函数GetAsync中获取lambda值“dinesh”

我声明了字符串变量并在Concat上调用Invoke来获得结果。

string ret=string.empty
var retVal=concat.Invoke(ret).Result 

从lambda表达式传递给我“dinesh”。

谢谢大家。 :)

© www.soinside.com 2019 - 2024. All rights reserved.