是否可以对C#中的几种方法应用限制

本文关键字:几种 方法 应用 是否 | 更新日期: 2023-09-27 18:23:48

我有一个脚本如下:

Int MethodOne (int param) {
    If (param > 5) {
        Return 0;
    }
    Return param;
}
Int MethodTwo (int param) {
    If (param > 5) {
        Return 0;
    }
    Return param * anotherVariable;
}

是否可以将条件"method should not execute if param>5"应用于我的所有方法,而不在每个方法内部重写它?

是否可以对C#中的几种方法应用限制

一种方法是不传递int(参见原始痴迷)

public class NotMoreThanFive 
{
  public int Value {get; private set;}
  public NotMoreThanFive(int value) 
  {
    Value = value > 5 ? 0 : value;
  }
}

现在

Int MethodOne (NotMoreThanFive param) {
    Return param.Value;
}
Int MethodTwo (NotMoreThanFive param) {
    Return param.Value * anotherVariable;
}

我不知道如何满足OP的要求,所以这里是我能想到的最好的答案。一种方法是创建另一个Restriction()方法,这样就可以更改一次,而不是在每个方法中都更改。

bool Restriction(int param)
{
    return param <= 5;
}
int MethodOne(int param)
{
    return Restriction(param) ? param : 0;
}
int MethodTwo(int param) 
{
    return Restriction(param) ? param * anotherVariable : 0;
}

您可以使用Function。

Func<int,int> restrict = x => x <= 5 ? x : 0;
int MethodOne (int param) {
    return restrict(param);
}
int MethodTwo (int param) {
    return restrict(param) * anotherVariable;
}
//...

当你只做restrict(param)时,它会为你做检查,并返回所需的号码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication8
{
    class Program
    {
        delegate int restriction(int x, string methodName);
        static void Main(string[] args)
        {
            int x = MethodOne(6);
            Console.WriteLine(x);
            int x1 = MethodOne(4);
            Console.WriteLine(x1);
            int x2 = Methodtwo(6);
            Console.WriteLine(x2);
            int x3 = Methodtwo(4);
            Console.WriteLine(x3);

            Console.ReadLine();
        }
        public static int restrictionMethod(int param, string methodName)
        {
            if (param > 5)
            {
                param = 0;              
            }
            if (methodName == "MethodOne")
            {
                return param;
            }
            else if (methodName == "Methodtwo")
            {
                return param * 4;
            }
            return -1;
        }
        public static int MethodOne(int param) 
       {
           restriction rx = restrictionMethod;
           int returnValue = rx(param, "MethodOne");
           return returnValue;
       }
        public static int Methodtwo(int param)
       {
           restriction rx = restrictionMethod;
           int returnValue = rx(param, "Methodtwo");
           return returnValue;
       }

    }
}

不需要编写多个方法,只需编写一个方法,该方法需要一个参数来决定需要调用哪个功能,并将您的条件置于该方法的顶部:

Int MethodOne (int func, int param) {
    If (param > 5) {
        Return 0;
    }
    switch(func)
    {
        case 1: Return param; break;
        case 2: Return param * anotherVariable; break;
        ...
    }
}