C# 如何使下面的代码段工作以及如何传递要调用的参数?

C# 如何使下面的代码段工作以及如何传递要调用的参数?,c#,.net,C#,.net,使用制度 f、 involk()由于需要字符串参数而失败,如何更正代码 namespace LamdaTest { class Program { static void Test(Func<string,bool> f) { **f.Invoke();** } static bool GetItem(str

使用制度

f、 involk()由于需要字符串参数而失败,如何更正代码

    namespace LamdaTest
    {
        class Program
        {
            static void Test(Func<string,bool> f)
            {
                **f.Invoke();**
            }

            static bool GetItem(string s)
            {
                Console.WriteLine("getItem");
                if (s == "123") return true;
                else return false; 
            }

            static void Main(string[] args)
            {
                Test((string s)=> GetItem("123"));
            }
        }
    }
名称空间LamdaTest
{
班级计划
{
静态孔隙试验(Func f)
{
**f、 调用()**
}
静态bool GetItem(字符串s)
{
Console.WriteLine(“getItem”);
如果(s==“123”)返回true;
否则返回false;
}
静态void Main(字符串[]参数)
{
测试((字符串s)=>GetItem(“123”);
}
}
}
尝试更换:

**f.Invoke();**
与:

但是,如果不使用
字符串
参数,则应使用委托类型
Func
操作

尝试替换:

**f.Invoke();**
与:

但是,如果不使用
字符串
参数,则应改为使用委托类型
Func
操作

尝试以下操作:

class Program
    {
        static void Test(Func<string, bool> f, string s)
        {
            f.Invoke(s);
        }

        static bool GetItem(string s)
        {
            Console.WriteLine("getItem");
            if (s == "123") return true;
            else return false;
        }

        static void Main(string[] args)
        {
            Test(GetItem, "Test String");


        }
类程序
{
静态无效测试(函数f、字符串s)
{
f、 调用;
}
静态bool GetItem(字符串s)
{
Console.WriteLine(“getItem”);
如果(s==“123”)返回true;
否则返回false;
}
静态void Main(字符串[]参数)
{
测试(GetItem,“测试字符串”);
}
试试这个:

class Program
    {
        static void Test(Func<string, bool> f, string s)
        {
            f.Invoke(s);
        }

        static bool GetItem(string s)
        {
            Console.WriteLine("getItem");
            if (s == "123") return true;
            else return false;
        }

        static void Main(string[] args)
        {
            Test(GetItem, "Test String");


        }
类程序
{
静态无效测试(函数f、字符串s)
{
f、 调用;
}
静态bool GetItem(字符串s)
{
Console.WriteLine(“getItem”);
如果(s==“123”)返回true;
否则返回false;
}
静态void Main(字符串[]参数)
{
测试(GetItem,“测试字符串”);
}


你能进一步解释一下吗?这是可行的,但有点违反直觉。这里:
Test((string s)=>GetItem(“123”);
你创建了一个委托,它接受一个
string
参数,然后对它完全不做任何操作。因此传递给委托的内容无关紧要。你可以调用
f(“法式吐司”);
并得到与
f(null);
相同的结果。如果您改为说
Test((字符串s)=>GetItem(s));
f(“123”);
将返回true,其他任何内容都将返回false。需要将您的答案和ace的答案结合起来以获得完整的解决方案。ace的答案是您问题的一个可能解决方案…示例有点模糊;有许多方法可以更正它。我查看是否存在不使用ace的solutionca等附加参数的解决方案n您需要进一步解释吗?它正在工作,但有点违反直觉。这里:
Test((string s)=>GetItem(“123”);
您创建了一个委托,该委托接受一个
string
参数,然后对它完全不做任何操作。因此,传递给该委托的内容无关紧要。您可以调用
f(“法式吐司“;
并得到与
f(null);
相同的结果。如果您改为说
Test((字符串s)=>GetItem(s));
f(“123”);
将返回true,其他任何内容都将返回false。需要将您的答案和ace的答案结合起来以获得完整的解决方案。ace的答案是您问题的一个可能解决方案…示例有点模糊;有许多方法可以更正它。我查看是否有解决方案,而不使用ace的solutionI等附加参数回答了你的类似问题。如果你需要跟进,请编辑该问题。我回答了你的类似问题。如果你需要跟进,请编辑该问题。这是直截了当的解决方案,谢谢。但cdhowie的解决方案更好。我想我在你的问题中想,如果你不在乎通过,你想通过一个字符串并给你的代表打电话string-then操作是一个更好的选项。我需要一种传递字符串的方法。因此我想我需要调用Test((string s)=>GetItem),“Test string”)。我不能直接将GetItem传递给TestI我真的不明白,你可以将字符串作为我上面示例中的第二个参数传递这是一个直截了当的解决方案,谢谢。但是cdhowie的解决方案更好。我想我在你的问题中想,你想要一种传递字符串并调用你的代理的方法,如果你不在乎传递字符串,那么就行动吧ion是一个更好的选项。我需要一种传递字符串的方法。因此我认为我需要调用Test((string s)=>GetItem(s),“Test string”)。我不能直接将GetItem传递给Test。我不太明白,您可以将字符串作为我上面示例中的第二个参数传递