我正在运行ReSharper的测试版,它给了我以下代码的警告:
int id;
// ...
DoSomethingWith(id.ToString());
Run Code Online (Sandbox Code Playgroud)
警告在id.ToString()通话中,它告诉我"明确指定字符串转换中的文化".我理解这个警告,而且我知道如何修复它 - 只需将代码更改为更加笨拙id.ToString(CultureInfo.InvariantCulture).
但我的问题是:这是必要的吗?我的意思是,显然,当您使用类型DateTime(不同的文化具有不同的日期格式)和Double(用于小数点的不同字符)时,指定文化很重要.但是Int32.ToString(),至少在en-US和invariant文化中,根本不添加任何格式.没有逗号,没有小数点,没有美元符号,没有.那么文化会有什么不同?
当您调用无参数时,是否有一些文化实际上会添加某种格式Int32.ToString()?或者这是ReSharper测试版中的错误,这个警告真的不适用Int32(在这种情况下我会提交ReSharper错误报告)?
内knockout.js绑定表达式,我可以使用$data,$parent和$rootpseudovariables.当我使用在JavaScript中声明的ko.computedobservable时,如何获得这些伪变量的等价物?
我有一个带有子集合的父视图模型,父视图模型有一个selectedChildobservable.鉴于此,我可以使用数据绑定表达式将CSS类添加到当前选择的子项:
<ul data-bind="foreach: children">
<li data-bind="text: name,
css: {selected: $data === $root.selectedChild()},
click: $root.selectChild"></li>
</ul>
<script>
vm = {
selectedChild: ko.observable(),
children: [{name: 'Bob'}, {name: 'Ned'}],
selectChild: function(child) { vm.selectedChild(child); }
};
ko.applyBindings(vm);
</script>
Run Code Online (Sandbox Code Playgroud)
但是我的观点模型会变得更复杂,我想"我被选中了吗?" 能够做的不仅仅是将单个CSS类添加到单个元素.我真的想isSelected在子视图模型上创建一个计算属性,因此我可以添加依赖于它的其他计算属性.
我尝试过只编写引用的JavaScript,$data并且$root,当敲门可能定义这些变量并且以某种方式让它们在调用我的赋值computed函数时它们在范围内时:
{
name: 'Bob',
isSelected: ko.computed(function(){ return $data === $root.selectedChild(); })
}
Run Code Online (Sandbox Code Playgroud)
但没有这样的运气:我的评估中function,无论是$data和$root是undefined. …
假设我检查了我的"主"分支.我已经对"master"进行了一些生产更改,现在我想将我的"实验"分支改为最新的master.但是,我想在不修改工作副本中的任何文件的情况下执行此操作.从本质上讲,我希望所有的魔法都发生在.git目录中,而不需要触及工作副本.
如果不是"不要修改我的工作副本"要求,这只是一个问题:
# current branch is master
git checkout experimental
git rebase master
git checkout master
Run Code Online (Sandbox Code Playgroud)
我真正的问题是,这会修改我的工作副本中的时间戳,即使我通过查看与我开始的完全相同的内容结束.一旦我运行"git checkout experimental",任何包含实验分支中的更改的文件都会将其mtime设置为当前时间 - 因此,自上次重新实验以来,在master中更改的所有文件也是如此.因为mtimes已经改变了,所以像构建工具这样的东西会让人觉得他们需要再做一些工作,即使在我完成时,文件的内容实际上并没有改变.(就我而言,如果项目文件的时间戳发生变化,Visual Studio认为需要花费大量时间来卸载和重新加载项目.)我想避免这种情况.
有没有办法一步完成上述所有操作,而无需修改工作副本中的任何内容 (假设在rebase期间没有冲突)?
(如果有冲突,我更倾向于将显示该错误,然后中止整个操作,而不用修改任何时间戳但是,这只是我的偏好,而不是硬性要求-我不知道什么是一切皆有可能.)
当然我可以编写一个脚本来捕获mtimes,运行git,然后重置mtimes; 但似乎Git已经有办法在没有打扰工作副本的情况下执行rebase这样的事情,因为rebase实际上是关于增量,而不是文件的实际内容.
我有一个ASP.NET Web API应用程序,带有一个ApiController,它具有异步方法,返回Task<>对象并用async关键字标记.
public class MyApiController : ApiController
{
public async Task<MyData> GetDataById(string id)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
如何为ApiController的异步方法编写NUnit测试?如果我需要使用另一个测试框架,我也会对此开放.我对.NET单元测试很新,所以我对学习最佳实践很感兴趣.
我正在尝试从Node.js启动一个shell命令,而不重定向该命令的输入和输出 - 就像使用shell脚本弹出命令或使用Ruby的system命令一样.如果子进程想要写入STDOUT,我希望它直接进入控制台(或重定向,如果我的Node应用程序的输出被重定向).
Node似乎没有任何直接的方法来做到这一点.看起来运行另一个进程的唯一方法是使用child_process,它总是将子进程的输入和输出重定向到管道.我可以编写代码来接受来自这些管道的数据并将其写入我的进程的STDOUT和STDERR,但是如果我这样做,API会迫使我牺牲一些灵活性.
我想要两个功能:
看起来Node想强迫我在这两个功能之间做出选择.
child_process.spawn,然后做child.stdout.on('data', function(data) { process.stdout.write(data); });同样的事情stderr,并且它会愉快地管道数据,直到奶牛回家.不幸的是,spawn不支持shell语法.child_process.exec.但是exec坚持要为我缓冲子进程的STDOUT和STDERR并最终将它们交给我,并且它限制了这些缓冲区的大小(可配置,默认为200K).我仍然可以挂钩on('data')事件,如果我想看到生成的输出,但exec仍然会将数据添加到其缓冲区.当数据量超过预定义的缓冲区大小时,exec将终止子进程.(从灵活性的角度来看child_process.execFile,这也是两个世界中最糟糕的:没有shell语法,但你仍然需要限制你期望的输出量.)
我错过了什么吗?有没有办法在Node中弹出子进程,而不是重定向其输入和输出?支持shell语法并且在预定义的输出量之后不会丢失的东西,就像在shell脚本,Ruby等中可用的那样?
我有一个WPF UserControl,Focusable ="True".它是窗口中唯一可聚焦的控件.
每当用户按Tab或Alt(特别是当他们按Alt + Tab键到另一个应用程序)时,我的UserControl会获得一个虚线边框,即焦点矩形.然后焦点矩形停留在那里直到窗口关闭.
如何防止我的UserControl显示此焦点矩形?
事实证明,我的UserControl实际上并没有显示焦点矩形.My Focusable UserControl包含另一个UserControl,而UserControl又包含ItemsControl,而ItemsControl则显示焦点矩形.
当我将FocusVisualStyle ="{x:Null}"添加到ItemsControl时,焦点矩形消失了.
我们将为我们的客户提供一个工具(除其他外)创建一个新的SQL Server数据库,我希望能够对他们提供的数据库名称进行基本验证.SQL Server的文档说明了数据库名称中有效的字符.但是,文档显然是不正确的,因为我可以成功创建名称违反记录规则的数据库.
根据SQL Server的CREATE DATABASE文档,数据库名称必须符合标识符规则; 标识符的规则取决于数据库兼容级别.当兼容水平为100(其中,根据SQL Server Management Studio中,意思是"的SQL Server 2008"),该名称必须以一个Unicode字母,_,@,或#; 后跟一个或多个字母,数字,@,$,#,或_.文档明确指出不允许嵌入空格或特殊字符.
这是因为我可以使用SQL Server Management Studio创建一个名称为的数据库This & That | "Other"- 它不仅包含嵌入空格(显式禁止),而且包含不均匀的特殊字符(|,")在文件名中有效.我检查过,数据库的兼容级别确实是"SQL Server 2008(100)",即使它的名称在该兼容级别被记录为无效.
哎呀,我甚至可以做的CREATE DATABASE " "(是的,这是一个空格),这证明了第一个字符并没有必须是字母,下划线,@符号,或井号.
所以我想我的问题是,哪些字符在SQL Server数据库名称中有效?是否有任何与SQL Server实际行为一致的文档规则?
我已经创建了一个Metro风格的C#/ XAML应用程序,现在我正在尝试将它添加到版本控制(Git以及后来的GitHub).这意味着要确定哪些文件属于版本控制,哪些不属于版本控制.
当我创建Metro项目时,Visual Studio为其添加了一个名为ProjectName _TemporaryKey.pfx 的文件.根据我的阅读,.pfx文件显然与代码签名或证书或类似的东西有关.我还没有找到任何可以解释它们在Metro风格应用程序环境中的含义,或者您应该如何管理它们的内容.
我打算将我的代码推送到GitHub(在公共存储库中).从长远来看,我打算将我的应用程序放在Windows商店中.如果需要.pfx文件来构建项目,那么我最好检查它.如果它包含一个数字身份,将我识别为应用程序的作者,并且发布它将允许互联网上的任何人推送我的应用程序的新版本在我不知情的情况下访问Windows商店,我最好不要检查它.
所以我的问题是,TemporaryKey.pfx文件中有什么秘密吗?我应该将它检入我的公共存储库,还是应该将其保留在源代码管理之外?(如果我没有将它放入源代码控制中,那么会破坏什么,但后来想在另一台计算机上查看我的代码?)
某些字体在字符上方和下方都有大量的空格.有没有办法纠正它,并收紧WPF中一个自动换行的段落行之间的空格(在TextBlock或FlowDocument中)?有点像线之间的负边距?
LineHeight在Paragraph和上有一个属性TextBlock,但它似乎只是让你增加间距 - 如果你把它设置为一个比默认值更小的值,它就会被忽略.
将WPF(与分辨率无关的)宽度和高度转换为物理屏幕像素的最佳方法是什么?
我在WinForms表单中显示WPF内容(通过ElementHost),并试图找出一些大小调整逻辑.当操作系统以默认的96 dpi运行时,我的工作正常.但是当操作系统设置为120 dpi或其他分辨率时,它将无法工作,因为就WinForms而言,报告其宽度为96的WPF元素实际上将是120像素宽.
我在System.Windows.SystemParameters上找不到任何"每英寸像素数"设置.我确信我可以使用WinForms等效(System.Windows.Forms.SystemInformation),但是有更好的方法吗(阅读:使用WPF API的方式,而不是使用WinForms API并手动进行数学运算)?将WPF"像素"转换为真实屏幕像素的"最佳方法"是什么?
编辑:我也希望在屏幕上显示WPF控件之前执行此操作.看起来像Visual.PointToScreen可以给我正确的答案,但我不能使用它,因为控件还没有父级,我得到InvalidOperationException"这个Visual没有连接到PresentationSource".
wpf ×3
.net ×2
async-await ×1
asynchronous ×1
c# ×1
cultureinfo ×1
dpi ×1
elementhost ×1
focus ×1
fonts ×1
git ×1
identifier ×1
javascript ×1
knockout.js ×1
node.js ×1
nunit ×1
pfx ×1
rebase ×1
resharper ×1
sql-server ×1
t-sql ×1
unit-testing ×1
winrt-xaml ×1
word-wrap ×1