我知道这是一个风格问题,因此是主观标签.我有一小段代码,有两个嵌套条件.我可以用两种方式对它进行编码,我希望看到更有经验的开发人员认为它应该是什么样子.
风格1:
while (!String.IsNullOrEmpty(msg = reader.readMsg()))
{
RaiseMessageReceived();
if (parseMsg)
{
ParsedMsg parsedMsg = parser.parseMsg(msg);
RaiseMessageParsed();
if (processMsg)
{
process(parsedMsg);
RaiseMessageProcessed();
}
}
}
Run Code Online (Sandbox Code Playgroud)
风格2:
while (!String.IsNullOrEmpty(msg = reader.readMsg()))
{
RaiseMessageReceived();
if (!parseMsg) continue;
ParsedMsg parsedMsg = parser.parseMsg(msg);
RaiseMessageParsed();
if (!processMsg) continue;
process(parsedMsg);
RaiseMessageProcessed();
}
Run Code Online (Sandbox Code Playgroud)
(附带问题:如何在源代码示例中放置空行?)
我刚刚开始尝试NetBeans.我创建了一个新的Java桌面应用程序项目,它自动添加了JDesktop"appframework-1.0.3.jar"库.但是,每当我尝试查看其源时,该命令都会失败.我尝试在线搜索,但我找不到它.那么我在哪里可以下载"Swing应用程序框架"(appframework.jar和swing-worker.jar)的源代码?
我在尝试对现有代码进行格式化时遇到错误.最初,代码具有using在命名空间外声明的指令:
using System.Collections.Generic;
namespace MyNamespace
{
using IntPair = KeyValuePair<int, int>;
}
Run Code Online (Sandbox Code Playgroud)
当我试图using在语句中插入指令(以符合StyleCop的规则)时,我在别名指令中遇到错误,我必须完全限定它:
namespace MyNamespace
{
using System.Collections.Generic;
//using IntPair = KeyValuePair<int, int>; // Error!
using IntPair = System.Collections.Generic.KeyValuePair<int, int>; // works
}
Run Code Online (Sandbox Code Playgroud)
我想知道两种情况之间有什么区别?(import-style)using指令的位置是否重要?
有没有办法在String.Format没有指定{1}, {2},等的情况下发送消息?是否可以采用某种形式的自动增量?(与普通老年人相似printf)
为什么X下面的方法没有被调用?!
static class Program
{
private static void Main()
{
X((IEnumerable<int>)null);
}
public static IEnumerable<T> X<T>(IEnumerable<T> e)
{
if (e == null)
throw new ArgumentNullException();
yield break;
}
}
Run Code Online (Sandbox Code Playgroud)
我试着踩到调试器但它没有进入X!yield break关键字是否会引起一些我不知道的副作用?
如果值得,我将使用Visual Studio 2008 Express和.NET 3.5 SP1.
我想(以编程方式)打印各种类型的文档,要求Windows执行它(使用默认的关联应用程序).我该怎么做(在.NET或C++/Win32 API中)?
例如,如果我在机器上安装了MS Office和Acrobat Reader,则应使用Acrobat Reader打印PDF文件,并且应使用MS Word打印DOC文件.但是,如果我没有安装MS Office,则应使用Wordpad或OpenOffice.org Writer(如果安装了后者)或任何应用程序当前是该类型文件的默认关联来打印DOC文件.
如何将通用列表转换为列表?
我正在使用一个ListCollectionView,我需要提供一个IList而不是IList<T>.
我看到很多例子可以将ILista 转换为a IList<T>,但不是其他方式.
我只是手动转换它(new List().AddRange(IList<T>)?
下图是我想要实现的目标。简而言之,将 CloudTrail 日志发送到 CloudWatch 日志组,然后扫描其中的某些事件,最后在发生一致事件时发送电子邮件警报。
我正在关注这个官方文档,它也有一个示例 CloudFormation 模板: http //docs.aws.amazon.com/awscloudtrail/latest/userguide/use-cloudformation-template-to-create-cloudwatch-alarms.html
使用上面的 CloudFormation 模板,我已经能够发送电子邮件警报。然而,警报是非常基本的;它不会发送关键信息,比如哪个用户发起了这个事件,什么时候发生的等等。
逻辑思维AWS::Logs::MetricFilter应该传递值AWS::CloudWatch::Alarm,然后将信息发送到该值。我已经查看了两者MetricFilter和Alarm服务的文档。Dimension更接近我想要的但还不能从日志中读取信息。
我会认为这是一个常见的用例,并且会有文档。我在这里遗漏了一些明显的东西吗?这里有人解决过这个问题吗?
AWS::Logs::MetricFilter 堵塞:
"AuthorizationFailuresMetricFilter": {
"Type": "AWS::Logs::MetricFilter",
"Properties": {
"LogGroupName": { "Ref" : "LogGroupName" },
"FilterPattern": "{ ($.errorCode = \"*UnauthorizedOperation\") || ($.errorCode = \"AccessDenied*\") }",
"MetricTransformations": [
{
"MetricNamespace": "CloudTrailMetrics",
"MetricName": "AuthorizationFailureCount",
"MetricValue": "1"
}
]
}
},
Run Code Online (Sandbox Code Playgroud)
AWS::CloudWatch::Alarm 堵塞
"AuthorizationFailuresAlarm": {
"Type": "AWS::CloudWatch::Alarm",
"Properties": {
"AlarmName" : "CloudTrailAuthorizationFailures",
"AlarmDescription" : "Alarms when an unauthorized API …Run Code Online (Sandbox Code Playgroud) amazon-web-services aws-cloudformation amazon-cloudwatch amazon-cloudtrail amazon-cloudwatchlogs
在进行简单的性能测量时,我惊讶地发现调用String.IndexOf(char)实际上比手动调用慢!这是真的吗?!这是我的测试代码:
const string str = @"91023m lkajsdfl;jkasdf;piou-09324\\adf \asdf\45\ 65u\ 86\ 8\\\;";
static int testIndexOf() { return str.IndexOf('\\'); }
static int testManualIndexOf() {
string s = str;
for (int i = 0; i < s.Length; ++i)
if (s[i] == '\\') return i;
return -1;
}
Run Code Online (Sandbox Code Playgroud)
我运行了每种方法2500万次,并使用a测量时间Stopwatch.手动版本的速度始终比另一个版本快25%.
有什么想法吗?!
编辑2:使用.NET 4.0在另一台机器上运行测试产生的结果与Marc Gravell的答案非常相似.比手动搜索更快.String.IndexOf(char)
编辑:今天(2009年1月4日)我想以更全面的方式检查这个问题,所以我创建了一个新项目,并编写了您将在下面找到的代码.从cmd运行发布模式进行1亿次迭代时,我得到以下结果:
- String. IndexOf : 00:00:07.6490042
- MyString.PublicIndexOf : 00:00:05.6676471
- MyString.InternIndexOf : 00:00:06.1191796
- MyString.PublicIndexOf2: 00:00:09.1363687
- MyString.InternIndexOf2: 00:00:09.1182569
Run Code Online (Sandbox Code Playgroud)
我运行这些测试至少20次,每次都得到几乎相同的结果.我的机器是XP SP3,VS …
由于字符串在.NET中是不可变的,为什么它们被复制用于简单的操作,如Substring或Split?例如,通过保持char[] value,int start并且int length,一个串可以创建简单地指向一个现有的字符串,我们可以节省复制了许多简单的操作字符串的开销.所以我想知道,为什么选择复制字符串进行此类操作?
例如,这样做是为了支持当前的实施StringBuilder吗?或者char[]当只需要几个字符时,为了避免保留对大的引用?或者你能想到的任何其他原因?你能为这种设计提出利弊吗?
正如@cletus所提到并得到@Jon Skeet的支持,这更像是在问这个方面为什么.NET字符串与Java不同.
.net ×5
c# ×5
string ×3
c++ ×1
coding-style ×1
formatting ×1
generics ×1
java ×1
jdesktop ×1
netbeans ×1
performance ×1
syntax ×1
winapi ×1
windows ×1