如何在字符串上使用属性c#

本文关键字:属性 字符串 | 更新日期: 2023-09-27 18:25:31

我有这个函数:

public int func1 (int x, int y)
{
    return Math.Max(x, y);
}

我想做的是,该函数将返回me或min或max,这取决于我将发送的参数,例如:

public static int func1 (int x, int y ,string minMax)
{
    return Math.minMax(x, y);
}
static void Main(string[] args)
{
    string x = "Max";
    Console.WriteLine(func1(1, 2, x));        
}

我想我可以在属性Max的末尾使用,在字符串上使用,我该怎么做?

谢谢!

如何在字符串上使用属性c#

这应该有效:

    public static int func1(int x, int y, string minMax)
    {
        return (int)typeof(Math).GetMethod(minMax, new[] { typeof(int), typeof(int) }).Invoke(null, new object[] { x, y });
    }

    private static void Main(string[] args)
    {
        Console.WriteLine("Max Wanted :" + func1(1, 2, "Max"));
        Console.WriteLine("Min Wanted :" + func1(1, 2, "Min"));
    }
public static int func1 (int x, int y ,string minMax)
{
    if(minMax == "Min") 
    { 
         return Math.Min(x,y);
    } 
    else if (minMax == "Max") 
    {
        return Math.Max(x,y);
    }
    else 
    {
      // Not sure what you want to do here in your program.
    }
}

我怀疑

if("Max".Equals(minMax)) {
    // code for max
} else {
    // code for min
}

会起作用。

我建议阅读控制结构。这是非常基本的东西,如果你还没有的话,你真的应该知道如何使用它们。

这应该有助于C#中的if/else结构:https://msdn.microsoft.com/en-us/library/5011f09h.aspx

另外,我把"Max"放在第一位的原因是为了避免Nullpointer异常。

您想要做的是使用反射按名称调用函数。

在这种情况下,我建议使用用户keyboardP建议的解决方案,因为它可以防止调用方传递无效值。

然而,这正是你所要求的:

public static int MaxOrMin(int x, int y, string methodName)
{
  Type mathType = typeof(Math);
  MethodInfo method = mathType.GetMethod(methodName);
  if (methodName.ToLower() != "max" || methodName.ToLower() != "min")
    throw new InvalidOperationException("Please specify Max or Min as the method name.");
  object result = method.Invoke(null, new object[] { x, y });
  return (int)result;
}

参考:这个答案

要添加到其他答案中,我个人有两种不同的方法(即只使用Math.MaxMath.Min),但如果您需要一种方法,我会使用bool而不是string。其中一个主要原因是您避免了区分大小写的问题,并且由于只有两个选项,因此布尔值适用于此。或者,您可以使用枚举。

public static int FindMinOrMax(int x, int y, bool findMax)
{
    return findMax ? Math.Max(x, y) : Math.Min(x, y);
}

编辑从其他评论中,我已经理解了你想要实现的目标。虽然我不推荐,但你可以做这个

public static int FindMinMax(int x, int y, string method)
{
    MethodInfo mi = typeof(Math).GetMethod(method, new[] { typeof(int), typeof(int) });
    return (int)mi.Invoke(null, new object[] { x, y} );
}

方法区分大小写,因此Max可以工作,但max不能工作,因为该方法被称为Max。你不能总是把第一个字母大写(除非它只是Min/Max),因为DivRem有驼色大小写。

+1 to Toto as he/she answered first, I just edited and noticed but will keep this post for completion