程序接收消息列表(基本类型).列表中的每条消息都必须根据其类型(后代类型)进行处理.但是,不同的消息需要不同的输入才能正确处理.
下面介绍的技术是什么?(我没有在编译器中检查过这段代码)
abstract class MessageProcessor
{
public static MessageProcessor GetProcessor(Message message, DataDomain data)
{
if (message.GetType() == typeof(FooMessage))
{
return new FooMessageProcessor(message, data.Name, data.Classification);
}
else if (message.GetType() == typeof(BarMessage))
{
return new BarMessageProcessor(message, data.AccountNo, data.CreditLimit);
}
else
throw new SomeException("Unrecognized type");
}
public abstract void Process();
}
Run Code Online (Sandbox Code Playgroud)
还有这个?
static class MessageProcessorFactory
{
public static MessageProcessor GetProcessor(Message message, DataDomain data)
{
if (message.GetType() == typeof(FooMessage))
{
return new FooMessageProcessor(message, data.Name, data.Classification);
}
else if (message.GetType() == typeof(BarMessage))
{
return new …Run Code Online (Sandbox Code Playgroud) 如果我给它一个BNF语法,我正在寻找能够构建解析器(在C#中)的工具(例如http://savage.net.au/SQL/sql-2003-2.bnf)
这样的发电机存在吗?
读完这个问题后,我安装了Consolas.麻烦的是,现在文字似乎太小了.我必须调整到12号才能舒服地使用它.切换到Consolas(或任何其他字体)时,其他人都会遇到这种情况吗?我的眼睛是否需要适应这种新字体,还是表明我的视力正在恶化?
我的分辨率是1280x1024
我有一个WCF Web服务方法,其原型是:
[OperationContract]
Response<List<Customer>> GetCustomers();
Run Code Online (Sandbox Code Playgroud)
当我将服务引用添加到客户端时,Visual Studio(2005)创建了一个名为"ResponseOfArrayOfCustomerrleXg3IC"的类型,它是"Response <List <Customer >>"的包装器.有什么方法可以控制包装器名称吗?ResponseOfArrayOfCustomerrleXg3IC听起来不太吸引人......
在处理XSL转换的服务器上禁用了命名空间检查(因为编写XSL的人不了解命名空间).我必须对XSL进行更改,但我无法测试它,因为没有定义任何名称空间,即.
代替
<xsl:template match="ns:element[position()=1]">...
Run Code Online (Sandbox Code Playgroud)
它有
<xsl:template match="element[position()=1]">...
Run Code Online (Sandbox Code Playgroud)
所以它与XML中的任何元素都不匹配,因为它们都是使用命名空间限定的.
我无法在服务器上进行测试,因为我无法访问它.修复XSL是没有用的,因为必须启用名称空间检查,这将打破所有其他转换.
所以我需要做的是找到一种在XSL转换期间忽略名称空间的方法.我可以访问MSXML,XMLSpy(在这里找不到选项),如果我真的需要,我可以使用C#或类似语言编写代码.
作为最后的手段,我可以编写一些正则表达式,但我真的不想走这条路,特别是在处理XML时...
在回复有关更多细节的评论时:
它是一个Windows 2003虚拟服务器,运行一个Methode Servlet实例(www.eidosmedia.com).我不知道这个servlet用于执行XSL转换的技术.他们忽略了名称空间,因为最初编写XSL的人不理解它们,并且没有将它们包含在XSL中.所以现在所有的XSL文件(数百个)都没有名称空间.
将所有这些文件一次性修复可能是一个有趣的挑战,但这不是我现在所需要的(并且由于涉及的测试数量,部门经理无论如何都不会同意它).我想知道的是,是否有可用的工具(或技术)允许我按原样获取这些XSL文件,并使用它们转换相应的XML文档而不考虑命名空间.在我看来,必须存在一个工具,因为编写原始XSL的人必须使用类似的东西来自己测试转换.
如果节点不存在,我如何使用XSLT创建节点?我需要在<group>下插入节点<sectionhead>,但如果<group>节点不存在,那么我也需要创建它.
例如.
输入(组节点存在):
<story>
<group>
<overhead>
<l1>overhead</l1>
</overhead>
<headline>
<l1>headline</l1>
</headline>
</group>
<text>
<lines>
<l1>line</l1>
</lines>
</text>
</story>
Run Code Online (Sandbox Code Playgroud)
输出:
<story>
<group>
<sectionhead />
<overhead>
<l1>overhead</l1>
</overhead>
<headline>
<l1>headline</l1>
</headline>
</group>
<text>
<lines>
<l1>line</l1>
</lines>
</text>
</story>
Run Code Online (Sandbox Code Playgroud)
输入(组节点不存在):
<story>
<text>
<lines>
<l1>line</l1>
</lines>
</text>
</story>
Run Code Online (Sandbox Code Playgroud)
输出:
<story>
<group>
<sectionhead />
</group>
<text>
<lines>
<l1>line</l1>
</lines>
</text>
</story>
Run Code Online (Sandbox Code Playgroud) 我正在尝试在运行时加载插件并访问其配置文件.配置文件中的配置节映射到从ConfigurationElementCollection,ConfigurationElement和ConfigurationSection派生的类.插件及其配置文件位于名为"Plugins"的子文件夹中.
问题是我似乎无法加载插件配置数据并将其正确地反序列化到它们各自的类中.
以下是插件EmailPlugin.dll的插件配置示例:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="EmailConfigurationSection" type="Foo.Plugins.EmailConfigurationSection, EmailPlugin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" allowDefinition="Everywhere" allowExeDefinition="MachineToApplication" restartOnExternalChanges="true"/>
</configSections>
<EmailConfigurationSection server="192.168.0.10">
<EmailSettings>
<add keyword="ERROR"
sender="error@error.com"
recipients="foo@bar.com, wiki@waki.com"
subject = "Error occurred"
body = "An error was detected"
/>
</EmailSettings>
</EmailConfigurationSection>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我使用以下代码加载:
private static System.Configuration.Configuration config = null;
public static System.Configuration.Configuration CurrentConfiguration
{
get
{
if (config == null)
{
Assembly assembly = Assembly.GetAssembly(typeof(EmailPlugin));
string directory = Path.GetDirectoryName(assembly.CodeBase);
string filename = Path.GetFileName(assembly.CodeBase);
string assemblyPath = Path.Combine(directory, filename);
config = …Run Code Online (Sandbox Code Playgroud) 在C#中检查字符串后缀的最快方法是什么?
我需要检查一个特定术语的大型列表中的每个字符串(从5000到100000个项目).保证该术语永远不会嵌入字符串中.换句话说,如果字符串包含该术语,则它将位于字符串的末尾.该字符串也保证长于后缀.文化信息并不重要.
这些是针对100000个字符串执行的不同方法(其中一半具有后缀):
1. Substring Comparison - 13.60ms
2. String.Contains - 22.33ms
3. CompareInfo.IsSuffix - 24.60ms
4. String.EndsWith - 29.08ms
5. String.LastIndexOf - 30.68ms
Run Code Online (Sandbox Code Playgroud)
这些是平均时间.[编辑]忘了提到字符串也被放入单独的列表中,但这并不重要.它确实增加了运行时间.
在我的系统子字符串比较中(使用String.Substring方法提取字符串的结尾并将其与后缀术语进行比较)在针对100000字符串进行测试时始终是最快的.使用子字符串比较的问题是垃圾收集可以大大减慢它(比其他方法更多)因为String.Substring创建新的字符串..NET 4.0中的效果并不像3.5及更低版本那么糟糕,但它仍然很明显.在我的测试中,String.Substring在12000-13000个字符串集上执行得更慢.这在系统和实现之间显然会有所不同.
[编辑]基准代码:http: //pastebin.com/smEtYNYN
[编辑] FlyingStreudel的代码运行速度很快,但Jon Skeet建议将EndsWith与StringComparison.Ordinal结合使用似乎是最好的选择.
我在尝试将嵌套条件映射到直观界面时遇到了麻烦.
例如.你将如何表示((条件1和条件2)或(条件1和条件5))和条件4
有人知道用于控制简单坦克式车辆运动的公式吗?
要"操纵"它,你需要改变施加左右"轮子"的力.例如.两个车轮上的1个单位的力使其前进.两个车轮上的-1个单位的力使其向后移动.对一个轮子施加的力比另一个轮子更大,然后转动.
您如何计算两个车轮所需的力量,以便将油箱转向一定程度的度数?
或者我是以错误的方式思考这个问题?
编辑:威廉凯勒提到我错过了坦克的速度.假设两个车轮上的1个单位的力以每秒1个单位向前移动油箱.
对于任何有兴趣的人,我只是在gamedev.net上找到了这个帖子:http://66.102.9.104/search?q = cache:wSn5t58ACJwJ:www.gamedev.net/community/forum/topic.asp%3Ftopic_id%3D407491+tank +轨道+半径+速度&HL = EN&CT = clnk和CD = 1&GL = ZA&客户=火狐-一个
另一个主题是:http://www.physicsforums.com/showthread.php? t = 220317
事实证明找到公式的关键只是知道正确的术语("滑行转向"):P