小编Pun*_*ora的帖子

Java中if语句的长列表

对不起,我找不到回答这个问题的问题,我几乎可以肯定其他人已经提出了这个问题.

我的问题是我正在编写一些系统库来运行嵌入式设备.我有命令可以通过无线电广播发送到这些设备.这只能通过文字来完成.在系统库中我有一个线程来处理看起来像这样的命令

if (value.equals("A")) { doCommandA() }
else if (value.equals("B")) { doCommandB() } 
else if etc. 
Run Code Online (Sandbox Code Playgroud)

问题是它有很多命令会迅速失控.看起来很可怕,调试很痛苦,并且在几个月的时间里难以理解.

java design-patterns command-pattern

100
推荐指数
5
解决办法
3万
查看次数

如何创建确定性指导

在我们的应用程序中,我们使用具有Guid值的属性创建Xml文件.该值必须在文件升级之间保持一致.因此,即使文件中的其他内容发生更改,该属性的guid值也应保持不变.

一个显而易见的解决方案是创建一个静态字典,其中包含文件名和用于它们的Guids.然后每当我们生成文件时,我们都会在字典中查找文件名并使用相应的guid.但这不可行,因为我们可能会扩展到100个文件并且不想保留大量的guid.

所以另一种方法是根据文件的路径使Guid相同.由于我们的文件路径和应用程序目录结构是唯一的,因此Guid对于该路径应该是唯一的.因此,每次我们运行升级时,文件都会根据其路径获得相同的guid.我找到了一种很酷的方法来产生这样的' 确定性指导 '(感谢Elton Stoneman).它基本上是这样的:

private Guid GetDeterministicGuid(string input) 

{ 

//use MD5 hash to get a 16-byte hash of the string: 

MD5CryptoServiceProvider provider = new MD5CryptoServiceProvider(); 

byte[] inputBytes = Encoding.Default.GetBytes(input); 

byte[] hashBytes = provider.ComputeHash(inputBytes); 

//generate a guid from the hash: 

Guid hashGuid = new Guid(hashBytes); 

return hashGuid; 

} 
Run Code Online (Sandbox Code Playgroud)

所以给定一个字符串,Guid将始终是相同的.

有没有其他方法或建议的方法来做到这一点?该方法的优点或缺点是什么?

.net c# uuid guid

96
推荐指数
4
解决办法
3万
查看次数

如何使用LINQ从List中提供的索引范围内选择值

我是一个LINQ新手试图用它来实现以下目标:

我有一份整体清单: -

List<int> intList = new List<int>(new int[]{1,2,3,3,2,1});
Run Code Online (Sandbox Code Playgroud)

现在,我想使用LINQ比较前三个元素[索引范围0-2]与最后三个[索引范围3-5]的总和.我尝试了LINQ Select和Take扩展方法以及SelectMany方法,但我无法弄清楚如何说出类似的东西

(from p in intList  
where p in  Take contiguous elements of intList from index x to x+n  
select p).sum()
Run Code Online (Sandbox Code Playgroud)

我也查看了Contains扩展方法,但是看不到我想要的东西.有什么建议?谢谢.

c# linq list range

62
推荐指数
3
解决办法
6万
查看次数

为什么ASP.NET框架在响应中添加"X-Powered-By:ASP.NET"HTTP标头?

我很想知道.Net Framework在其响应中添加"X-Powered-By:ASP.NET"Http Header是否有特定原因?其他Web服务器(Apache,httpd)是否做同样的事情?

编辑:我知道它可以改变.我想知道是否有理由保留它或保留原样?

asp.net http-headers

15
推荐指数
3
解决办法
7929
查看次数

解析C#中的负双数时出现异常

我正在编写一个代码,它可以从数据库中提取一些数据.问题是我想将负数字符串"-2.8"转换为double.我想,很简单.我先尝试过:

var climateString = "?2.8";
var number = double.Parse(climateString);
Run Code Online (Sandbox Code Playgroud)

有了这个结果:

An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll
Run Code Online (Sandbox Code Playgroud)

所以我再想一想,在谷歌搜索,得到了新答案:

var climateString = "?2.8";
var styles = NumberStyles.AllowParentheses | NumberStyles.AllowTrailingSign |NumberStyles.Float | NumberStyles.AllowDecimalPoint;
var rit = double.Parse(climateString, styles);
Run Code Online (Sandbox Code Playgroud)

史诗再次失败:

An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll
Run Code Online (Sandbox Code Playgroud)

我再想一想,我不能这么愚蠢,不知道怎么做这么简单的任务.我试过这个:

 var climateString = "?2.8";
 var doue = Convert.ToDouble(climateString, CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

是的,再次完全相同的例外.我开始查看数字,并且我在负号上意识到了.仔细看这个数字"-2.8"这不是负数.这是负数"-2.8".再看看那些标志"----- -----"不一样.解析具有不同符号字符的字符串会抛出异常:S.所以,任何人都有一个想法,如何优雅地将其解析为C#中的双数?谢谢你!

.net c# c#-3.0 c#-4.0

13
推荐指数
3
解决办法
2万
查看次数

MSBuild和TFSBuild之间的差异是什么?

背景:我们有一个TFS服务器设置,我可以管理我们的源代码并跟踪工作项和错误.我们还有CC.Net设置来帮助我们做CI(主要是构建和运行单元测试).我们使用.net framework 3.5和VS 2008

我熟悉MSBuild并在我们当前的项目中使用它来完成许多预部署和部署任务.但是,我不确定TFSBuild的目的.我认为它在TFS服务器级别用于执行构建任务.但是我无法找到关于我(作为开发人员,而不是我们的TFS的管理员......开发人员只对TFS服务器具有读访问权限)以及如何使用TFS Build来简化部署/ CI任务的良好文档.当我已经在我的构建过程中使用MSBuild并且CC.Net已经运行了我们的单元测试集时,可以使用TFSBuild使我的任务更容易/更有效吗?TFSBuild是CC.Net的替代品吗?如何将TFSBuild与Visual Studio 2008集成?

更新:'TeamBuild'如何适应这个堆栈.不仅仅是理论,将这些东西放在一起的简单例子将非常有用.现在,我们只做两件事:使用MSBuild执行部署任务(更新配置文件,版本信息,将应用程序发布到远程服务器),然后CC.Net接管.我在哪里可以将TeamBuild/TFSbuild放入这张图片中.更重要的是,我需要吗?我知道每个人都有不同的要求,但它一般有帮助吗?我从其中一个使用TFS构建的答案得到的一个很好的理由是在某些条件下自动创建TFS票据.你们通常做的事情有哪些?

msbuild build-automation tfsbuild visual-studio-2008

10
推荐指数
1
解决办法
7070
查看次数

在Pacman中,幽灵是否会独立选择路径来寻找pacman?

所以我最近在我的手机上玩了很多pacman,我想知道鬼魂是如何独立工作的.我在考虑如何编程.

我想到的一个选择是线程.所有4个幽灵都在自己的线程中运行,并以某种方式找到了pacman的位置.但是有四个线程正在工作并且同步会很困难似乎有点太多了.此外,谷歌在Javascript中写了pacman,它不支持线程,所以它可以在没有线程的情况下完成,并且必须有一种更简单的方法.

我的第二个想法是事件处理程序.我只是将pacman将触发的'directionChanged'事件连接到4个事件处理程序,每个鬼程一个.然后每个幽灵决定走向pacman的路径.我认为这更有可能发生了什么.但是如果事件处理程序是同步执行的话,它会变慢,因为路径必须按顺序计算,第4个鬼魂需要时间来改变方向,这可能会产生可见的滞后(可能).此外,当他们撞墙时,鬼魂会自己发射一个事件,他们的事件处理程序会改变鬼魂的方向.但考虑到pacman改变方向的频率和四个鬼魂的反应,事件处理程序似乎也有点太多了.

我说上述想法会有点太多,因为记得游戏是在30年前编写的,当cpu时间和内存稀缺时,所以我认为必须有一个更简单的方法.

而且,即使pacman仍然存在,鬼魂似乎也在遵循不同的路径.所有鬼魂都使用完全不同或不同优化的路径寻找算法吗?

我更感兴趣的是找出所有鬼魂似乎同时为他们自己的工作方式而不是他们使用的路径查找算法.思考?

pacman

7
推荐指数
2
解决办法
1560
查看次数

为什么访问枚举定义中不存在的枚举成员(通过转换整数)不会出错

要修复我的应用程序中的错误,我必须设置System.Net程序集中找到的ServicePointManager类的SecurityProtocolType,如下所示:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
Run Code Online (Sandbox Code Playgroud)

在.Net 4.5+中,SecurityProtocolType枚举有四个成员:

public enum SecurityProtocolType
{
    Ssl3 48,    
    Tls 192,    
    Tls11 768,  
    Tls12 3072
}
Run Code Online (Sandbox Code Playgroud)

但是,在.Net 4.0中,SecurityProtocolType枚举只有两个成员:

public enum SecurityProtocolType
{
    Ssl3 48,    
    Tls 192
}
Run Code Online (Sandbox Code Playgroud)

因为,我的代码中的另一个项目也需要相同的修复,但该项目是在.Net 4.0上没有Tls12作为枚举的成员,这个答案提出了以下解决方法(前提是我安装了.Net 4.5)框):

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
Run Code Online (Sandbox Code Playgroud)

可能是我错过了明显的smoething,但我的问题是,(SecurityProtocolType)3072当3072不是.Net 4.0中enum的有效值时,如何解决Tls12.我想了解幕后工作的魔力是什么.

.net c# enums

6
推荐指数
1
解决办法
94
查看次数

如何在使用DTO时处理异常

我有一个解决方案结构,其中契约(数据/服务等)与业务实体位于不同的项目中,我使用Automapper在第三个服务实现项目之间进行映射.

WCFProject.Service.BusinessLayer
WCFProject.Service.Contracts
WCFProject.Service.Impl
Run Code Online (Sandbox Code Playgroud)

我的ServiceImpl引用了这两个其他项目,从DataContract到BusinessEntity的自动化在这里完成,然后在BusinessEntity对象上调用正确的方法

现在,我想添加一些FaultContracts,然后在我的业务逻辑中使用它们来抛出正确的异常.但是如果我将它们添加到Contracts项目(这是理想的,因为我想将所有合同保存在一起),那么我需要BusinessLayer引用合同以在BusinessLayer中使用它们.如果可能的话,我想保持这些独立性,并且只处理这两层之间的DTO.这是我的一个有效的方法,我想让这两个项目保持独立吗?你也映射了例外吗?或者有更好的方法来解决这个问题.

c# wcf dto

3
推荐指数
1
解决办法
848
查看次数

ToList().Linq查询中的Sort()给出了编译错误

我试图结合两个SortedDictionaries,将结果更改为a List<KeyvaluePair<string,string>>Sort()结果.以下语句抛出错误:

var combinedEntries = from p in leftDict.Union(rightDict).ToList().Sort(myComparer) select p;
Run Code Online (Sandbox Code Playgroud)

错误:无法找到源类型"void"的查询模式的实现.找不到"选择".

这不起作用,因为Sort()返回void.如果我分开声明,它的作用是:

var combinedEntries = from p in leftDict.Union(rightDict) select p;
List<KeyValuePair<string, string>> finalentries = combinedEntries.ToList();
finalentries.Sort(comparer);
Run Code Online (Sandbox Code Playgroud)

我知道sort是一种List类型的方法而不是IEnumerable,但我认为ToList()之前调用Sort()会解决这个问题.所以第一个问题是它可以像我在第一个声明中尝试一样使用吗?如果没有,我该如何利用orderby这里?

c# sorting linq-to-objects

0
推荐指数
1
解决办法
8273
查看次数