返回首页

GT;我工作的一个主要的轮胎制造商的项目,他们希望把自己的网站上的下拉菜单,以帮助用户选择从他们提供的轮胎尺寸。下拉菜单应该像],然后当我们点击"尺寸轮胎。"

无论如何,我知道如何编写ASP等等等等,但我的代码是所有

,我必须这样做,因为如你所知,根据本指南,轮胎尺寸在几slighltly不同格式。

无论如何,还有得是一个更紧密的方式编写解析算法,但没有发生在我前面。 Page.Options是一个Listlt; stringgt;它包含了轮胎的大小条目的数量,例如,

{C}
这就是为什么我有线

var slashedItems = page.Options.FindAll(x => x.Contains('/') && !x.StartsWith("LT"));

            var itemsContainingX = page.Options.FindAll(x => x[2] == 'X');

            var slashedItemsWithLTInFront = page.Options.FindAll(x => x.Contains('/')

                && x.StartsWith("LT"));

我的问题是,有一个更清洁和更紧密的方式做?

布赖恩

回答

评论会员:TRK3 时间:2012/02/05
"从紧"不一定正确或维护代码的一个很好的标准

事实上,我认为这是更好地写出清晰的代码,少紧张。

第一件事就是为您的数据来描述的有效形式。

我不完全了解轮胎的大小命名,但似乎有:

#/#R#
#/#ZR#
#X#R#
#R#

"长线"可能出现在开头或结尾。

要非常清楚你在做什么,我会使用Regex类创建一个正则表达式来描述你的每个格式,然后对每个regex测试和使用的东西发现:

{体C3}
这绝对不是"严格"比你的代码,但它明确处理中page.Options的每个项目。它可以解析的项目,因为它符合你定义的正则表达式或记录一个错误,因为该项目不符合。 (你可以使用该日志来找出你错过了什么,并修复它。您当前的代码将做意想不到的事情,如果一个项目是不是您所期望的fomats之一。它会要么放弃它完全或将结束最多将在一个下拉菜单垃圾。)
也它可以让你完全控制你做什么,与你在正则表达式匹配的不同部分。

这是很清楚,要分成3个数字显示#/#R#模式,但我不知道你想要做什么#X#R#或#R#模式或LT或Z - 也许你想保持#X#一起,也许你要在一个单独的下拉的LT ...无论你决定做什么,你有你匹配的每个组件,正是你想要的,你可以与他们无关。SAKryukov
评论会员:游客 时间:2012/02/05
当然有一个更清洁的方式。这是很好的,你想找到一个。对我来说,它看起来很明显。首先,分析总是不好。你需要做创作,而不是解析。你的问题是,您的轮胎属性和命名命名的非均匀。可以概括。你需要创建一个数据模型中描述所有可能的组合模型/零件名称/号码中提到的轮胎特性。在现实生活中存在的一些这些特性的组合,有些则不是。在你的模型的对象图的顶部你应该有记录引用选择其中一个可能的格式,模型的名称,大小,等等。让我们说你5不同的名称格式,4不同大小,7制造商的公司,12名单型号名称。你的数据模型有一个单独的容器中,每个类别。然后,您将创建一个类,它定义了每个项目的每个类别的组合容器。这不是一个问题,如果某些领域是空的。对不起,我不能快速绘制UML图的这个简单的事情。在内存中的对象图不会是一棵树mdash;这将是一个循环图。不管。有一种方法,坚持所有自动。使用数据协定。它可以自动将你的对象图存储在XML文件恢复回来。看到{A1}]现在,当你与所有可能真的现有各类轮胎填充列表时,您将使用这些引用类的实例的容器。列表项的文本将被建立基于格式(引用)和可用的特性。当你点击列表项,你应该在这些情况下,容器指数,你可以找到所选实例列表中,并在容器中,例如,看所有的类的实例的引用。每个引用都将指向您不同的特点,如大小,型号等现在的问题是减少手动编写XML文件的问题。做到以下几点:为引导,方案不完整的数据图,建立内存中的所有容器和节约使用DataContractSerializer的样本。保持这个临时的代码,以供将来使用,但不能将它部署。它会产生一个XML文件的样本。数据合同文件是非常可读,你会立刻看到如何支持它。如果你愿意,你可以很容易地创建一个更新mdash;您的支持工具。没有天哪解析mdash;你不能让这样的代码的可靠和支持。mdash;SA