【发布时间】:2015-10-02 10:57:37
【问题描述】:
我编写了一个 C# 扩展方法,该方法目前适用于 int。代码很简单 - 它确定给定的 int 是否以另一个 int 开头(不使用字符串转换)并返回 true 或 false:
namespace StartsWithNumberX
{
public static class IntExtensions
{
/// <summary>
/// Determine if the current number starts with another number.
/// </summary>
/// <param name="number"></param>
/// <param name="startsWith"></param>
/// <returns></returns>
public static bool StartsWith(this int number, int startsWith)
{
var inputPlace = number.FindPlaceNumber();
var comparePlace = startsWith.FindPlaceNumber();
var placeDiff = inputPlace - comparePlace;
var numberCopy = number;
for (var i = 0; i < placeDiff; i++)
{
numberCopy = numberCopy/10;
}
return numberCopy == startsWith;
}
/// <summary>
/// Find the "place" of the number.
/// less than 10 = 1
/// less than 100 = 2
/// less than 1000 = 3
/// etc.
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
private static int FindPlaceNumber(this int number)
{
var placeNumber = 0;
while (number > 0)
{
number = number/10;
if (number > 0)
{
placeNumber++;
}
else
{
placeNumber++;
break;
}
}
return placeNumber;
}
}
}
我想让这段代码更通用,这样同样的代码也可以用于其他数字类型,比如long、double、decimal。
是否可以在 C# 中执行此操作,或者我需要为不同的数字类型复制此代码?
【问题讨论】:
-
你为什么不在这里分享你的代码,因为也许有些国家限制互联网,就像我一样:(
-
没有像
where T: BaseTypes这样的东西,所以我不得不给出一个坏消息。您最好的选择是编写一些重载,例如public static bool StartsWith(this long number, int startsWith) { return StartsWith((int)number, startsWith); } -
@EZI 我相信这就是协变/逆变的用途...msdn.microsoft.com/en-us/library/dd799517(v=vs.110).aspx
标签: c# generics extension-methods