C# 如何在字符串c中找到000005000和5000相等#

C# 如何在字符串c中找到000005000和5000相等#,c#,string,C#,String,我尝试使用String.Contains(),但没有得到预期的结果 00005000不等于500,但等于5000。但不能将此字符串转换为整数 这是lambda表达式中的条件之一。我不能分享代码,所以这样问。我无法通过强制转换为int来检查条件,因为它将抛出错误 LINQ to Entities无法识别方法“Int32 ParseInt(System.String)”方法,并且无法将此方法转换为存储表达式。 非常感谢您的帮助。首先,让我们用一个非常简单的例子:如果两个“数字”都没有前导0,那么将它

我尝试使用String.Contains(),但没有得到预期的结果

00005000不等于500,但等于5000。但不能将此字符串转换为整数

这是lambda表达式中的条件之一。我不能分享代码,所以这样问。我无法通过强制转换为int来检查条件,因为它将抛出错误
LINQ to Entities无法识别方法“Int32 ParseInt(System.String)”方法,并且无法将此方法转换为存储表达式。


非常感谢您的帮助。

首先,让我们用一个非常简单的例子:如果两个“数字”都没有前导0,那么将它们作为字符串进行比较就足够了。所以我们遇到的问题是,我们如何处理前导零?有几条路可以走,但最直接的就是摆脱它们。因此,我们将编写一个方法来实现这一点:

public static string RemoveLeadingZeros(this string input) { ... }
没有实现,因为这是问题的核心,而这看起来像是家庭作业。但是让我们假设我们可以编写这个方法

一旦我们有了它,比较方法就变得微不足道了:

public static bool AreEqual(string firstNumber, string secondNumber)
{
    // Code assumes firstNumber and secondNumber are actually numeric values in string form; you can add code to verify that if that assumption isn't right
    return RemoveLeadingZeros(firstNumber) == RemoveLeadingZeros(secondNumber);
}
当您对“相同”数字有不同的表示(例如“1e6”和“1000000”)时,这将不起作用,但它将解决基本问题

因此,现在有一个新问题需要解决:如何从数字中删除前导0?正如上面Eric Lippert所问的:如何删除一个前导零?你能用这种方法把它们全部去掉吗


这一切的好处是,你不应该猜测问题,也不应该总是立即寻找捷径。如果你甚至想不出一个简单的解决方案,试着想办法将问题简化为你能解决的问题,然后找出如何将更复杂的问题简化为更简单的问题。

使用整数转换:

var strNum = "00005000";
var intNum = Convert.ToInt64(strNum);
试试这个:

public bool AreStrinEqualAsNumber(string num1, string num2)
{
    if (n1 == null ||n2 == null)
        return false;

    // remove padded zero's from both the number.
    var n1 = num1.TrimStart('0');
    var n2 = num2.TrimStart('0');

    // if after removing zero's the length are not equal the numbers cant be equal.
    if (n1.Length != n2.Length)
        return false;

    // do a character by character comparision
    for(int i = 0; i < n1.Length; i++)
    {
        // number cant be equal if characters differ.
        if (n1[i] != n2[i])
            return false;
    }

    // no different character was found.
    return true;
}
public bool arestrinequalNumber(字符串num1,字符串num2)
{
如果(n1==null | | n2==null)
返回false;
//从两个数字中删除填充的零。
var n1=num1.TrimStart('0');
变量n2=num2.TrimStart('0');
//如果删除零后长度不相等,则数字不能相等。
如果(n1.长度!=n2.长度)
返回false;
//逐字比较
对于(int i=0;i
进行整数比较
int.Parse
条件是我们不应该将其转换为整数。如果您不能将其转换为整数(即家庭作业),您可以在比较之前使用
myString.TrimStart('0')
删除前导零以解决更简单的问题。实现以下方法:“方法M获取一个字符串并返回一个字符串。如果该字符串以0开头并包含两个或多个字符,则返回的字符串是不带前导零的字符串。否则,该字符串将原封不动地返回。”一旦实现了方法M,您能看到如何使用它来解决实际问题吗?记住,计算机编程就是解决小问题,并结合这些解决方案来解决更大的问题。所以先解决这个小问题吧@itsme86:它是否适用于这些输入并不相关。相关的问题是,您的建议是否适用于所有输入。那么:是吗?(提示:否。查找失败的情况。)阅读注释
条件是我们不应将其转换为整数