gpt4 book ai didi

c# - 需要帮助避免跨多个方法签名的代码重复

转载 作者:太空狗 更新时间:2023-10-29 23:55:47 24 4
gpt4 key购买 nike

我需要在我的应用程序中将某些数字限制在有效范围内。我创建了委托(delegate)来处理这个问题。我不知道这样做是否正确;我遇到了一些感觉不对的地方。

public delegate int RestrictInteger(int minimum, int maximum, int value);
public delegate decimal RestrictDecimal(decimal minumum, decimal maximum, decimal value);

class GameMath
{
public static int RestrictNumber(int minimum, int maximum, int value)
{
if (value < minimum) { value = minimum; }
else if (value > maximum) { value = maximum; }
return value;
}
public static decimal RestrictNumber(decimal minimum, decimal maximum, decimal value)
{
if (value < minimum) { value = minimum; }
else if (value > maximum) { value = maximum; }
return value;
}
}
public class SomeClass
{
public int aValue { get; set; }

public void SetValue(int value)
{
RestrictInteger doRestrict = new RestrictInteger(GameMath.RestrictNumber);
this.aValue = doRestrict(0, 100, value);

}
}

一方面,似乎如果我添加更多签名,那么我希望能够对它们执行不同的操作(例如,转换或舍入等)。另一方面,在这两个签名之间,代码完全相同。这样可以吗,或者是否有某种方法可以编写适用于这两种情况的一种操作,即使其他情况可能使用不同的操作?

最佳答案

是的,你可以用泛型来做到这一点 - 虽然不能用 <> .您应该使用这些类型实现 IComparable<T> 的事实为他们自己:

public static T RestrictNumber<T>(T min, T max, T value) where T : IComparable<T>
{
return value.CompareTo(min) < 0 ? min
: value.CompareTo(max) > 0 ? max
: value;
}

(您可以仍然在这里使用您的原始代码 - 不过我更喜欢这种对条件运算符的使用;它满足了我不断增长的功能倾向。)

关于c# - 需要帮助避免跨多个方法签名的代码重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2067751/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com