使用私有属性而不是私有字段有什么区别
private String MyValue { get; set; }
// instead of
private String _myValue;
public void DoSomething()
{
MyValue = "Test";
// Instead of
_myValue = "Test";
}
Run Code Online (Sandbox Code Playgroud)
有任何性能问题吗?或只是一个命名惯例?
经过多年使用丑陋的MFC ASSERT宏,我终于决定抛弃它并创建最终的ASSERT宏.
我很好地获取文件和行号,甚至是失败的表达式.我可以显示带有这些的消息框,以及中止/重试/取消按钮.
当我按下Retry时,VS调试器会跳转到包含ASSERT调用的行(而不像某些其他ASSERT函数那样反汇编).所以这一切都非常有效.
但真正酷的是显示失败的函数的名称.
然后我可以决定是否调试它而不试图从文件名中猜出它的功能.
例如,如果我有以下功能:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
ASSERT(lpCreateStruct->cx > 0);
...
}
Run Code Online (Sandbox Code Playgroud)
然后当ASSERT触发时,消息框将显示如下内容:
Function = CMainFrame::OnCreate
Run Code Online (Sandbox Code Playgroud)
那么,在运行时找到当前函数名的最简单方法是什么?
它不应该使用MFC或.NET框架,即使我确实使用这两者.
它应该尽可能便携.
我在VS2008中有一个包含C#和C++/CLI项目的解决方案.我的解决方案中有3个"解决方案平台":
我从不想"只是构建C#"或"只是构建C++",我总是希望构建所有项目.所以解决方案平台的比喻对我来说毫无意义,我会将它留在混合平台上,或者只要它们都构建完毕.
现在VS有时会自动将当前的解决方案平台切换到任何CPU(我不知道何时或为什么).这意味着按下F7只会尝试构建C#项目,这显然是不行的.所以我必须切换回混合平台并再试一次.
那么如何解决这个恼人的问题呢?我试过两种方法:
还有其他想法吗?
我已经配置了TeamCity来执行NUnit测试.
当我手动运行它然后它工作正常.但不知何故,它会累积挂起的更改,即使我刷新TeamCity的概述页面也不会运行测试.
我想知道我必须使用哪个设置才能运行挂起的更改?
基本上我想先启动第一个挂起的更改,一旦它出现就执行.
谢谢!

我有很多项目的大解决方案,使用VS2008 SP1,并且每天至少遇到一次LNK2022错误.如果我对解决方案进行全面重建,它可以很好地构建,但这并不好玩.
当依赖DLL"无意义地"更改时(即不更改任何方法或类),并且稍后构建引用项目时,就会发生这种情况.合并元数据时失败 - 无论这意味着什么.
首先要注意的是共享DLL是#using从多个.CPP文件引用的.
第二件事是,如果我从共享DLL中删除AssemblyInfo.cpp,那么问题就会消失(但我不确定这是否是一个合理的修复?).
我已尽可能地将其缩小到包含2个CLR类库项目的以下解决方案(xxx项目依赖于共享):
alt text http://i42.tinypic.com/jg2vds.png
以下是每个文件的内容:
public ref class Shared
{
};
Run Code Online (Sandbox Code Playgroud)
#pragma once
#using "Shared.dll"
public ref class Common
{
private:
Shared^ m_fred;
};
Run Code Online (Sandbox Code Playgroud)
#include "inc.h"
Run Code Online (Sandbox Code Playgroud)
要重现,首先要重建解决方案.它会建立好.
现在保存Shared.cpp并构建解决方案,它将构建正常并显示:
...
2>------ Build started: Project: xxx, Configuration: Debug Win32 ------
2>Inspecting 'd:\xxx\xxx\Debug\Shared.dll' changes ...
2>No significant changes found in 'd:\xxx\xxx\Debug\Shared.dll'.
2>xxx - 0 error(s), 0 warning(s)
========== Build: 2 succeeded, …Run Code Online (Sandbox Code Playgroud) select * from sampleTable
where CONVERT(VARCHAR(20),DateCreated,101)
= CONVERT(VARCHAR(20),CAST('Feb 15 2012 7:00:00:000PM' AS DATETIME),101)
Run Code Online (Sandbox Code Playgroud)
我想没有时间比较日期
以上查询还可以吗?或者你建议其他更好的解决方案
我想将Stylecop警告视为错误,但它对我不起作用.
我的项目被配置为将警告视为错误,如果我使用真正的"编译器警告"构建它确实显示编译器错误.但是通过"Stylecop警告",它只显示编译器警告.
因此,当有Stylecop警告时,我向TeamCity烦恼地签到并不会破坏CI构建.
我正在使用VS2013和Stylecop 4.7.49.
项目 - >属性 - >构建
项目 - >样式设置 - >选项
using System;
namespace CodeUsageTest
{
public class CodeUsage
{
private string fff()
{
int nobodyLovesMe; //CS0168
return "";
}
}
}
Run Code Online (Sandbox Code Playgroud)
构建输出:
1>------ Build started: Project: CodeUsageTest, Configuration: Debug Any CPU ------
1>D:\Sandbox\CodeUsageTest\CodeUsage.cs(9,17,9,30): error CS0168: Warning as Error: The variable 'nobodyLovesMe' is declared but never used
========== Build: 0 succeeded, 1 failed, 3 up-to-date, 0 …Run Code Online (Sandbox Code Playgroud) c# stylecop compiler-warnings visual-studio visual-studio-2013
创建新的MFC应用程序时,向导会在几乎每个CPP文件中创建以下代码块:
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
Run Code Online (Sandbox Code Playgroud)
有时候它也增加了这个:
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
Run Code Online (Sandbox Code Playgroud)
如果它是多余的,我想从我的CPP文件中删除此代码.我在VS2008上使用带有C++/CLI的MFC应用程序.
从CPP中删除此代码后,我尝试在Debug中运行,它似乎工作正常."新"变量工作正常,没有泄漏,ASSERT对话框显示正确的文件名并跳转到违规行.
任何人都可以告诉我它的作用以及删除它是否安全?
这里有一百万个关于如何将字符转换为ASCII值的帖子.
好吧,我希望完全相反.
我有一个ASCII值存储为int,我想在字符串中显示其ASCII字符表示.
即请显示代码为int转换65到A.
我现在拥有的是什么 String::Format("You typed '{0}'", (char)65)
但这导致了"You typed '65'"我希望它"You typed 'A'"
我正在使用C++/CLI,但我猜任何.NET语言都会...
(后来编辑,以改善未来googlers的问题)
我已经开始IHttpActionResult使用[ResponseType]属性来装饰我的方法,目的是让消费者更容易知道如何处理响应.
这对GET来说很有意义,因为我可能想要对返回的数据做些什么.
但[ResponseType]对PUT或POST请求有什么意义,它们不返回任何数据,只是成功代码?
例如
[HttpPut]
[Route("Contact/{contactId:int}/name", Name = "UpdateContactName")]
[ResponseType(typeof(?????))] // <- what should I put here? do I even need it at all?
public IHttpActionResult UpdateName(int contactId, [FromBody] string name)
{
//...
return StatusCode(HttpStatusCode.Accepted);
}
Run Code Online (Sandbox Code Playgroud)