在探索我们遗留密码的潮湿地下墓穴和尘土飞扬的地下城时,我偶然发现了这个:
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”是这个类的错误名称,还是什么?我发现它非常具有误导性(显然)。
答案 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”是这个类的错误名称,还是什么?
在我看来,是的
它应该被命名为StringUtils
或StringHelper
或类似的东西
它也应该是static
。
<强>更新强>
更重要的是,我更喜欢它是一种扩展方法。那就像是:
string UPCE = // whatever
if(UPCE.ContainsAlpha())
{
// ...
}
答案 2 :(得分:1)
FormatString可能是从某种形式的配置初始化的。我会检查构造函数。这是唯一有意义的方式(对我而言)。
答案 3 :(得分:1)
即使它显然很奇怪(不应该“包含......”返回一个布尔值?)并且反直觉(我创建了一个“空”FormatString
,即没有通过其构造函数传递,为什么要它做了什么?),它并没有让我觉得完全没有意义。
“containsAlpha”也可能意味着:检查参数1(在这种情况下为UPCE
)是否包含字母(可能是字母数字)字符。所以FormatString
将是一个通用类,它检查字符串格式的基本特征,即它们是否包含数字,字母,特殊字符等。
FormatString
也可能是一些专门的类(检查命名空间?),它检查格式,例如: UPCs,最好称为UPCFormat
,UPCFormatVerifier
等。
如果我没有完全弄错,我不认为这是一个.NET框架功能。这是哪个目标框架版本?你有FormatString
的来源吗?这是什么意思?
无论如何,一段美丽的奇怪代码。 ; - )
Ziffusion的回答也很有意义,请看一下construcor代码。也许它比它应该做的更多,一些初始化要么关于某些默认状态,要么更糟糕的是涉及静态全局状态的东西,除非你运行整个系统,否则你永远都找不到。
编辑:现在阅读您的编辑 - 事实证明,FormatString
做“通用字符串格式检查我是对的。”可能StringFormat
稍微好一点,但总而言之,我会说:如果你想检查UPC的格式,可以使用带有静态工厂/构建器方法的UPC类来构建UPC对象一个字符串,包括格式检查,或者创建一个UPCFormatCheck
类,它只完成检查特定格式的工作。通过这种方式,您可以避免任何可能含义的通用名称。 (根据建议,在该课程中你可以使用一些很酷的LINQ-oneliner来进行实际检查。)