如何在字符串上使用属性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的末尾使用,在字符串上使用,我该怎么做?
谢谢!
这应该有效:
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.Max
或Math.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