我有Visual Studio 2010的问题.当我向下/向上滚动时,例如,在属性窗口中,它会发生.它的内容变得模糊几毫秒.
当我使用"ScrollViewer"时,它也发生在我自己的WPF应用程序中.
有人知道怎么解决吗?
作为一名程序员,我本以为这会抛出异常.是否有理由将null视为""?
string s = "hello";
string t = null;
Console.WriteLine(s + t);
Run Code Online (Sandbox Code Playgroud)
输出:
你好
只是为了强调我的问题,你知道为什么决定将null变为String.Empty吗?我期待一些字符串被添加,但是有一个问题进一步回到它没有正确检索它并返回null.问题没有被注意到!
这是一个伪代码,为什么我认为它是坏的(为什么我发现没有错误感到震惊):
您可以假设我重载了ToString以提供该人员的姓名或有关他们的详细信息.
Person p = PersonDatabase.GetForName("Jimmy Gibbs");
Console.WriteLine("Name is: " + p.ToString());
Run Code Online (Sandbox Code Playgroud)
抛出异常,因为p为null
String p = PersonDatabase.GetForName("Jimmy Gibbs").Name;
Console.WriteLine("Name is: " + p);
Run Code Online (Sandbox Code Playgroud)
即使p为null(它将其视为""),也不会抛出异常.
(如果你想挑剔并说我将无法获得Name,因为GetforName将为null,请将其视为此:)
String p = PersonDatabase.GetNameFromID(1234); // Returns a string or null if not found
Console.WriteLine("Name is: " + p);
Run Code Online (Sandbox Code Playgroud)
(如果你在列表或数组中使用这个值,你最终会得到一个空白条目,这对我来说是破坏的,它创建了javascript并尝试按ID"ID"获取元素)
我的Ruby代码中有一个结构,看起来有点像这样
Parameter = Struct.new(:name, :id, :default_value, :minimum, :maximum)
Run Code Online (Sandbox Code Playgroud)
之后,我使用创建此结构的实例
freq = Parameter.new('frequency', 15, 1000.0, 20.0, 20000.0)
Run Code Online (Sandbox Code Playgroud)
在某些时候,我需要这个结构的完全重复,所以我打电话
newFreq = freq.clone
Run Code Online (Sandbox Code Playgroud)
然后,我换了newFreq名字
newFreq.name.sub!('f', 'newF')
Run Code Online (Sandbox Code Playgroud)
奇迹般地改变freq.name了!
像一个简单的任务newFreq.name = 'newFrequency'不会改变freq.
这是应该的方式吗?
编辑:使用类而不是结构和重载clone来制作深层副本是一个好主意吗?
该CreateProcess的文档状态(我的粗体强调):
lpEnvironment [in,optional]
[...]如果lpEnvironment指向的环境块包含Unicode字符,请确保dwCreationFlags包含CREATE_UNICODE_ENVIRONMENT.如果此参数为NULL并且父进程的环境块包含Unicode字符,则还必须确保dwCreationFlags包含CREATE_UNICODE_ENVIRONMENT.
MSDN是错误的并且夸大了旗帜的含义还是真正的要求?
我见过的代码从未设置过标志并且似乎有效,但我的偏执部分想要100%遵守MSDN所说的内容.这样说,我不确定你真的可以遵循MSDN的规则而不会走极端.
当lpEnvironment为NULL时,必须设置(或不设置)CREATE_UNICODE_ENVIRONMENT会让我觉得很荒谬:
如果我没有传递环境块,那么CreateProcess必须获取块本身.在那种情况下,它比我更了解块的类型.
我怎么知道块实际上是否包含Unicode字符?
我是否希望获得该块并检查当前代码页之外的字符?(我假设这是MSDN在"Unicode字符"中的含义.)
如果我必须获取env-block,那么我不妨在lpEnvionment中传递它而不是NULL,那么为什么甚至允许NULL呢?
必须获取和检查env-block似乎是CreateProcess的每个调用者的疯狂要求; 它肯定是API本身应该处理的东西.
当它说"父进程"它甚至意味着我的进程,即将成为新的父进程,还是它意味着我的进程的父进程?我最初阅读MSDN让我觉得我必须以某种方式判断启动我的进程的CreateProcess调用是否已经传递了ANSI或Unicode环境块,但情况肯定不是这样.
我假设,在基于NT的操作系统上,所有进程都有一个Unicode env块,如果在创建进程时需要从ANSI转换,并且进程不会挂起到按原样传递给CreateProcess的任何数据块.
(也许这整个事情是Win9x时代的一个遗留问题,那时操作系统本身不是Unicode?虽然如此,我看不出应用程序代码如何能够比操作系统本身更好地做出决策,也不知道为什么应该这样做预计会.)
除了从不设置标志的代码,我已经看到了代码,如果在编译时定义UNICODE,它总是设置它.当需求在运行时env块中的内容以及代码可能在加载到外部进程的DLL中时,这没有任何意义.
env块是进程范围的,因此在编译时定义的UNICODE似乎无关紧要.
如果只是我调用CreateProcessA或CreateProcessW,那么当该块为NULL时,该标志应该是隐式的,所以这也没有意义.
在我自己的代码中,我决定避免这个问题并始终获取环境块的Unicode副本(通过GetEnvironmentStringsW),始终将其传递给CreateProcess并始终设置CREATE_UNICODE_ENVIRONMENT.根据MSDN的说法,这是我能看到100%正确的唯一方法.
当然,我正在做的事情是多余的.CreateProcess不可能是那个傻瓜,可以吗?
另一方面,这是我们正在讨论的CreateProcess.它不是设计最好的API,还有许多其他陷阱(在我的脑海中):
因此,或许假设它表现得聪明或者可能会为来电者处理琐事是不正确的......
我不知道是否从我自己的代码中删除偏执垃圾或将其添加到我看到的所有其他代码中.哎呀.:-)
增加18/Nov/2010:
当env-block为NULL时,看起来这个标志似乎无关紧要,至少在Windows 2000到Windows 7中都是如此.请参阅下面的测试.
显然,这并不能确定该标志在将来的操作系统中总是无关紧要,但我真的看不出它是怎么回事.
假设我们有祖父母创建了即将创建Child的Parent:
如果操作系统始终将父级的env-block存储为Unicode - 如果祖父项传递ANSI块,则在父级创建期间将其转换为ANSI - 那么当父传递NULL块时,CreateProcess会出错以便注意该标志.CreateProcess必须知道Child将继承的块将始终是Unicode.
或者,OS可以完全按照祖父母的方式存储父级的env-block.(这似乎不太可能,但它是可能的.)在这种情况下,Parent无法检测祖父母传递的块类型.同样,CreateProcess必须知道块的类型并忽略该标志.
这是我今天早上写的一个测试,它以不同的方式启动子进程,并使子进程报告为env-var(为简洁起见,只是"OS"变量):
wchar_t *szApp = L"C:\\Windows\\system32\\cmd.exe";
wchar_t *szArgs = L"\"C:\\Windows\\system32\\cmd.exe\" /C set OS";
STARTUPINFOW si = {0};
si.cb = sizeof(si);
PROCESS_INFORMATION pi = {0};
// For brevity, this …Run Code Online (Sandbox Code Playgroud) 我正在使用 ItemCheckEventArgs 并且可以从中获取索引值,但是从该值中我不确定如何查找所检查的文本的内容。
如何使用Moq验证方法是否只调用一次?在Verify()对Verifable()东西实在是令人困惑的.
我以前在我的WPF应用程序项目中有一个名为"Controls"的子文件夹.它包含一个WPF用户控件.我决定将该用户控件移动到我的"Views"文件夹中.由于原始文件夹为空,我决定将其从项目中删除.
因为删除了用户控件和文件夹,我收到编译错误,因为用户控件使用了ProjectName.Folder命名空间,现在没有任何引用它.MainWindow.g.cs是ProjectName.Controlsusing语句中的引用.
我知道*.g.cs是由VS生成的,无法编辑,因为它会被覆盖.如何才能将该命名空间写入g.cs文件?我尝试清理我的解决方案/项目并重建但没有任何工作.
我正在开发Windows Phone 7应用程序.我在Silverlight中使用此实现进行MD5散列.
我正在使用此代码 -
protected string GetMD5Hash(string input)
{
byte[] bs = System.Text.Encoding.UTF8.GetBytes(input);
MD5Managed md5 = new MD5Managed();
byte[] hash = md5.ComputeHash(bs);
StringBuilder sb = new StringBuilder();
foreach (byte b in bs)
{
sb.Append(b.ToString("x2").ToLower());
}
return sb.ToString();
}
Run Code Online (Sandbox Code Playgroud)
但是,我没有为我提供的输入获得正确的MD5哈希值.我不确定这段代码有什么问题.如果有人在Silverlight中使用 此实现进行MD5哈希,你知道我哪里出错吗?
这就是我们如何防止浏览器缓存JS和CSS文件.这似乎有点hacky ..有更好的方法吗?
<%
//JSP code
long ts = (new Date()).getTime(); //Used to prevent JS/CSS caching
%>
<link rel="stylesheet" type="text/css" media="screen" href="/css/management.css?<%=ts %>" />
<script type="text/javascript" src="/js/pm.init.js?<%=ts %>"></script>
<script type="text/javascript" src="/js/pm.util.func.js?<%=ts %>"></script>
Run Code Online (Sandbox Code Playgroud)
更新:我们想要阻止缓存的原因是为了确保在我们执行新版本时加载更新版本的文件.
我只需要安装VS2010 SDK吗?
是否有TFS2010 SDK这样的东西,如果是这样,那将是我需要安装的东西,如果是这样,我在哪里可以得到它?
在Microsoft的"Extend Visual Studio"网站上,我看到了"TFS 2010 SDK"示例代码的链接,但我找不到TFS 2010 SDK本身.
我问的原因是:我正在构建一个不是我的代码库,这取决于Microsoft.TeamFoundation.WorkItemTracking.Client.dll.