我错过了什么,或者这段代码是荒谬的吗?

时间:2013-09-13 23:18:36

标签: c# compact-framework windows-ce .net-1.1 format-string

在探索我们遗留密码的潮湿地下墓穴和尘土飞扬的地下城时,我偶然发现了这个:

FormatString formatString = new FormatString();
if (formatString.containsAlpha(UPCE) != -1) 
{
    UPCLen = 11;
}

我错过了什么,或者是我对此的反应,即:formatString如何包含任何内容?没有赋值给它... 总是 -1 ,假设表示“找不到”“是否正确?

更新

为了回答评论中明显的混淆,我认为FormatString是一些乱七八糟的东西.NET(这个项目使用.NET 1.1),但你是对的 - 这是一个本土的类。这是构造函数:

public FormatString()
{
}

...和containsAlpha()方法:

public int containsAlpha(string strToCheck)
{
    const string ALPHA_CHARS = "abcdefghijklmnopqrstuvwxyz";
    try
    {
        char[] tmpCharArry = ALPHA_CHARS.ToCharArray();
        return strToCheck.ToLower().IndexOfAny(tmpCharArry);
    }
    catch(Exception ex)
    {
        Duckbill.ExceptionHandler(ex, "FormatString.containsAlpha");
        return 0; // not -1?
    }
}

现在我问你:“FormatString”是这个类的错误名称,还是什么?我发现它非常具有误导性(显然)。

4 个答案:

答案 0 :(得分:3)

就我们所知,它可能是这样的:

public class FormatString
{
    public int containsAlpha(object foo)
    {
        return 0;
    }
}

这将满足您展示的示例。它甚至不需要构造函数定义。

您应该右键单击并“转到定义”以了解其真正的作用。

<强>更新

根据您更新的详细信息,如果您可以使用较新的.NET Framework,我会说您可以用以下内容替换整个函数:

using System.Linq;

public static bool ContainsAlpha(string s)
{
    return s != null && s.Any(Char.IsLetter);
}

但是既然你被困住了,这也应该有效:

public static bool ContainsAlpha(string s)
{
    if (s == null) return false;

    for (int i = 0; i < s.Length; i++)
        if (Char.IsLetter(s, i))
            return true;

    return false;
}

或者:

public static bool ContainsAlpha(string s)
{
    if (s == null) return false;

    for (int i = 0; i < s.Length; i++)
        if (Char.IsLetter(s[i]))
            return true;

    return false;
}

答案 1 :(得分:2)

  

“FormatString”是这个类的错误名称,还是什么?

在我看来,是的 它应该被命名为StringUtilsStringHelper或类似的东西 它也应该是static

<强>更新
更重要的是,我更喜欢它是一种扩展方法。那就像是:

string UPCE = // whatever
if(UPCE.ContainsAlpha())
{
 // ...
}

答案 2 :(得分:1)

FormatString可能是从某种形式的配置初始化的。我会检查构造函数。这是唯一有意义的方式(对我而言)。

答案 3 :(得分:1)

即使它显然很奇怪(不应该“包含......”返回一个布尔值?)并且反直觉(我创建了一个“空”FormatString,即没有通过其构造函数传递,为什么要它做了什么?),它并没有让我觉得完全没有意义。

“containsAlpha”也可能意味着:检查参数1(在这种情况下为UPCE)是否包含字母(可能是字母数字)字符。所以FormatString将是一个通用类,它检查字符串格式的基本特征,即它们是否包含数字,字母,特殊字符等。

FormatString也可能是一些专门的类(检查命名空间?),它检查格式,例如: UPCs,最好称为UPCFormatUPCFormatVerifier等。

如果我没有完全弄错,我不认为这是一个.NET框架功能。这是哪个目标框架版本?你有FormatString的来源吗?这是什么意思?

无论如何,一段美丽的奇怪代码。 ; - )

Ziffusion的回答也很有意义,请看一下construcor代码。也许它比它应该做的更多,一些初始化要么关于某些默认状态,要么更糟糕的是涉及静态全局状态的东西,除非你运行整个系统,否则你永远都找不到。

编辑:现在阅读您的编辑 - 事实证明,FormatString做“通用字符串格式检查我是对的。”可能StringFormat稍微好一点,但总而言之,我会说:如果你想检查UPC的格式,可以使用带有静态工厂/构建器方法的UPC类来构建UPC对象一个字符串,包括格式检查,或者创建一个UPCFormatCheck类,它只完成检查特定格式的工作。通过这种方式,您可以避免任何可能含义的通用名称。 (根据建议,在该课程中你可以使用一些很酷的LINQ-oneliner来进行实际检查。)