高阶函数问题福彩12选5走势图

sipi41

成员
已加入
2020年4月12日
留言内容
6
编程经验
1-3
您好,我是C#的新手,我在读书时读到我可以将函数作为参数传递和接收函数或同时作为函数和函数两者使用福彩12选5走势图所以我正尝试进行练习,但无法完成这项工作福彩12选5走势图请帮忙!

我的想法是创建一个像这样的静态函数:
C#:
public static void TestMethod<T1, TResult>(Func<T1, TResult> myfunction ) {
            福彩12选5走势图
}
现在,我的想法是我可以通过提供一个与T1和TResult相匹配的函数来调用此静态方法,如下所示:
C#:
Func<string, string> ChangeName = name => $"My name is: {name}";

TestMethod<string, string>(ChangeName);
现在我的理解是,在TestMethod内部我收到了一个函数,现在我可以使用myfunction并将其调用为行动了,对吗?在这种情况下,如果我调用该函数,它应该返回一个字符串(根据我的定义),所以我认为我应该能够做到这一点:
C#:
public static void TestMethod<T1, TResult>(Func<T1, TResult> myfunction ) {
    Console.WriteLine(    myfunction.Invoke()        );
        // or
    Console.WriteLine(    myfunction()    );
}
但是我不能,因为它显示了一个询问T1参数的错误福彩12选5走势图
Untitled.png


请帮忙!福彩12选5走势图
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,566
地点
悉尼,澳大利亚
编程经验
10+
您正在指定函数具有参数。该参数的参数在哪里?您在这里特别声明:
C#:
Func<string, string> ChangeName = name => $"My name is: {name}";
您的函数应该接受一个名称值,并返回一些包含该名称的文本。打电话时叫什么名字?您没有提供。它必须来自某个地方,您必须将其传递给该函数。
 

sipi41

成员
已加入
2020年4月12日
留言内容
6
编程经验
1-3
您正在指定函数具有参数。该参数的参数在哪里?您在这里特别声明:
C#:
Func<string, string> ChangeName = name => $"My name is: {name}";
您的函数应该接受一个名称值,并返回一些包含该名称的文本。打电话时叫什么名字?您没有提供。它必须来自某个地方,您必须将其传递给该函数。
那么正确的实施方法是什么?例如,如果我在函数上调用数据库或文本文件以获取名称,现在我在方法内部有一个带有名称的变量,现在可以调用该函数了,该怎么做然后??谢谢您的帮助! :)
 

跳伞者

工作人员
已加入
2019年4月6日
留言内容
2,605
地点
弗吉尼亚州切萨皮克
编程经验
10+
这是一个免费赠品:
C#:
Console.WriteLine(myfunction("Asmodeus"));
 

sipi41

成员
已加入
2020年4月12日
留言内容
6
编程经验
1-3
Here's a freebie:
C#:
Console.WriteLine(myfunction("Asmodeus"));
无法执行福彩12选5走势图这就是为什么这让我发疯福彩12选5走势图我的理解是我需要一个字符串,但是系统要求的是T1类型,而不是字符串,因此出现错误提示"无法将字符串转换为T1"福彩12选5走势图
 

跳伞者

工作人员
已加入
2019年4月6日
留言内容
2,605
地点
弗吉尼亚州切萨皮克
编程经验
10+
啊!好点福彩12选5走势图目前正在忙,但是这里有一个快速而肮脏的解决方法:
C#:
class Program
{
    public static void TestMethod<T1, TResult>(Func<T1, TResult> myfunction, T1 param1)
    {
        Console.WriteLine(myfunction(param1));
    }

    static void Main()
    {
        Func<string, string> changeName = name => $"My name is: {name}";

        TestMethod<string, string>(changeName, "Asmodeus");
    }
}
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,566
地点
悉尼,澳大利亚
编程经验
10+
如果要编写通用方法,则必须编写通用代码,即适用于所有通用参数类型。基本上,您尝试执行的操作没有任何意义。您正在尝试设计一些东西来演示特定功能,但这没有任何意义。这就是为什么如此多的初学者作业是垃圾:因为他们尝试使用功能是愚蠢的方式,没有明智的开发人员会使用它。

就您而言 测试方法 说它将接受具有单个参数和返回类型的任何方法并执行它。您如何期望执行带有参数类型的方法 T1 如果您没有该类型的值作为参数传递? 测试方法 必须获取类型的值 T1 从某处。 @跳伞 已经显示了一种完成此操作的方法,即将该类型的参数添加到 测试方法。那差不多渲染 测试方法 没有意义,除了作为学习帮助。问题是,在尝试学习某些东西时,您使它变得更加混乱。这就是生活。有时,这是唯一的方法。
 

sipi41

成员
已加入
2020年4月12日
留言内容
6
编程经验
1-3
如果要编写通用方法,则必须编写通用代码,即适用于所有通用参数类型。基本上,您尝试执行的操作没有任何意义。您正在尝试设计一些东西来演示特定功能,但这没有任何意义。这就是为什么如此多的初学者作业是垃圾:因为他们尝试使用功能是愚蠢的方式,没有明智的开发人员会使用它。

就您而言 测试方法 说它将接受具有单个参数和返回类型的任何方法并执行它。您如何期望执行带有参数类型的方法 T1 如果您没有该类型的值作为参数传递? 测试方法 必须获取类型的值 T1 从某处。 @跳伞 已经显示了一种完成此操作的方法,即将该类型的参数添加到 测试方法。那差不多渲染 测试方法 没有意义,除了作为学习帮助。问题是,在尝试学习某些东西时,您使它变得更加混乱。这就是生活。有时,这是唯一的方法。
好的福彩12选5走势图此评论没有太大帮助福彩12选5走势图我们已经知道我们需要从某个地方获取T1类型的值福彩12选5走势图如果这是如此错误,那么您的解决方案是什么?如果这毫无意义,那有什么更好的呢?感谢您的帮助,以澄清这一点福彩12选5走势图
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,566
地点
悉尼,澳大利亚
编程经验
10+
正如我所说,问题是您正在尝试做一些事情。如果您有想法可以实际执行类似的操作,那么获取所需的数据将不是问题。更为现实的情况是,您有一个没有参数的方法,并且它通过任何适当的机制在内部获取所需的数据。例如。
C#:
using System;
using System.IO;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            // Use a method group as a delegate.
            DisplayOutput(Console.ReadLine);

            // Use a Lambda as a delegate.
            DisplayOutput(() =>
            {
                Console.Write("Enter text file path: ");

                var filePath = Console.ReadLine();

                return File.Exists(filePath)
                    ? "No file specified"
                    : File.ReadAllText(filePath);
            });

            Console.ReadLine();
        }

        private static void DisplayOutput<TResult>(Func<TResult> method)
        {
            Console.WriteLine(method());
        }
    }
}
然后,您可以使用 显示输出 执行任何无参数功能并将结果输出到控制台。
 

sipi41

成员
已加入
2020年4月12日
留言内容
6
编程经验
1-3
正如我所说,问题是您正在尝试做一些事情。如果您有想法可以实际执行类似的操作,那么获取所需的数据将不是问题。更为现实的情况是,您有一个没有参数的方法,并且它通过任何适当的机制在内部获取所需的数据。例如。
C#:
using System;
using System.IO;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            // Use a method group as a delegate.
            DisplayOutput(Console.ReadLine);

            // Use a Lambda as a delegate.
            DisplayOutput(() =>
            {
                Console.Write("Enter text file path: ");

                var filePath = Console.ReadLine();

                return File.Exists(filePath)
                    ? "No file specified"
                    : File.ReadAllText(filePath);
            });

            Console.ReadLine();
        }

        private static void DisplayOutput<TResult>(Func<TResult> method)
        {
            Console.WriteLine(method());
        }
    }
}
然后,您可以使用 显示输出 执行任何无参数功能并将结果输出到控制台。
很有道理福彩12选5走势图我们在DisplayOutput内进行登录福彩12选5走势图然后,如果是true或X,我们将调用该方法,则无需参数福彩12选5走势图
 
最佳 底部