我们可以使用两个同名的Func吗?编译器不会抛出任何错误

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

在下面的代码中,我在一个具有相同名称且都相同的方法中创建了2个Funcs 1)Class级别和2)。当我构建解决方案时,它不会抛出任何错误,并且执行得很好。现在,我有兴趣调用类成员的Func,但是我没有找到方法。有人可以帮我吗。

public class TaskDemo
{
    public int NumberStrat { get; set; }
    public int NumberEnd { get; set; }

    Func<int, string> isNumerEvenOdd = (i) =>
    {
        return i.ToString();
    };

    public void print()
    {

        List<int> NumbersList = new List<int>();
        for (int i = 0; i < 1000; i++)
        {
            NumbersList.Add(i);
        }

        Func<int, string> isNumerEvenOdd = (i) =>
        {
            return "abc";
        };

        Parallel.ForEach(NumbersList, (i) => Console.WriteLine(isNumerEvenOdd(i)));

    }
}
c# delegates action predicate func
2个回答
0
投票

使用this关键字。

Parallel.ForEach(NumbersList, (i) => Console.WriteLine(this.isNumerEvenOdd(i)));

示例-> https://onlinegdb.com/SkRpXyCRH

有关更多信息-> https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/this


0
投票

实际上,警告是您本地声明的Func<int, string> isNumerEvenOdd隐藏了在类级别声明的Func<int, string> isNumerEvenOdd,并且从未使用过。因此,本地成员只需隐藏类成员即可正常工作。

之所以没有编译器错误,是因为您在不同的作用域(类和方法)中用相同的名称定义了变量。当您尝试在相同作用域中使用相同名称定义变量时,编译器显示错误。

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