一旦警告级别达到第二级或更高级别,为什么我会在这个简单的代码示例中收到以下警告?
public int Foo(int a)
{
if (a >= 0) throw new ArgumentException("a should be negative", "a");
Contract.EndContractBlock();
return a;
}
Run Code Online (Sandbox Code Playgroud)
CodeContracts:建议要求:此前提条件是多余的:请考虑将其删除.您是否将结构值与null进行比较?
显然,整数可以是负数,因此前提条件几乎不是多余的,为什么我会收到此警告?
编辑:这是ILSpy在查看exe时为创建的函数显示的内容:
public int Foo(int a)
{
if (a >= 0)
{
ContractHelper.RaiseContractFailedEvent(ContractFailureKind.Precondition, null, "a < 0", null);
throw new ArgumentException("a should be negative", "a");
}
return a;
}
Run Code Online (Sandbox Code Playgroud)

我只是想知道为什么名称修改从未被C++标准标准化.显然,使用不同的名称修改算法会损害互操作性[1],我认为没有任何优势可以实现定义.
也就是说,与调用约定或基元大小相反,机器本身并不关心甚至不知道如何调用函数.那么为什么它没有标准化,为什么它仍然没有标准化?编译器在版本之间无论如何都改变了规则.
[1]所有出口功能的人都extern "C"说话量大.
为什么多处理模块需要在"冻结"以生成Windows可执行文件时调用特定函数才能工作?
在C#/ Java中,运算符优先级is分别instanceof导致一些丑陋的必要括号.例如,而不是写作if (!bar instanceof Foo)你必须写if (!(bar instanceof Foo)).
那么为什么语言团队认为!运营商优先级高于/ instanceof?不可否认,在C#中你可以覆盖operator!哪些会在某些情况下导致不同的结果,但这些情况似乎非常罕见(并且在任何情况下都不直观),而检查某些东西不是某种类型或子类型的情况很多更倾向于.
为什么我们必须使用funcallCommon Lisp中的高阶函数?例如,为什么我们必须使用:
(defun foo (test-func args)
(funcall test-func args))
Run Code Online (Sandbox Code Playgroud)
而不是更简单:
(defun bar (test-func args)
(test-func args))
Run Code Online (Sandbox Code Playgroud)
来自程序背景,我有点惊讶,因为我更习惯的语言(例如Python,C#)不需要区分.特别是,至少在源代码级别,C#编译器将其转换为类似的东西func.invoke().
我看到的唯一问题是,这意味着我们不能再调用全局函数test-func,因为它会被遮蔽,但这不是问题.
我们有一个框架,在一个解决方案中分成许多单独的项目.我现在想为每个单独的项目创建NuGet包,但保证只能在一个解决方案中使用一个版本的框架(可能跨多个项目).
例如,假设框架由两个项目组成:
Framework
Framework_1
Framework_2
Run Code Online (Sandbox Code Playgroud)
现在,当使用此框架时,一个项目可能会引用Framework_1,而另一个项目引用Framework_2.我想确保两个软件包具有相同的版本(如果有一个简单的单步过程升级到新版本,则可获得奖励积分)
我想我会定义一个解决方案级别的Framework包,所有其他包都严格依赖它.问题是NuGet只需安装多个版本的解决方案级别包就没有问题.
基本上我尝试了以下内容:
解决方案级别的nuspec文件:
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>My.Framework</id>
<version>1.0.0</version>
<title>My.Framework</title>
<authors>voo</authors>
<owners>voo</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Some Framework Solution Package</description>
<copyright>Copyright © 2015</copyright>
</metadata>
</package>
Run Code Online (Sandbox Code Playgroud)
和一个nuspec包的一部分:
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>My.Framework.BL</id>
<version>1.0.0</version>
<title>My.Framework.BL</title>
<authors>voo</authors>
<owners>voo</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Business Layer</description>
<copyright>Copyright © 2015</copyright>
<dependencies>
<dependency id="My.Framework" version="[1.0.0]"/>
</dependencies>
</metadata>
</package>
Run Code Online (Sandbox Code Playgroud)
现在的问题是,如果我尝试安装,说另一个My.Framework.EF带有版本的软件包,1.0.1并且对My.Framework1.0.1 的显式依赖Visual Studio只会安装My.Framework两次 …
为什么我不允许从常量unordered_map中读取对象?
const unordered_map<int, int> z;
int val = z[5]; // compile error
Run Code Online (Sandbox Code Playgroud)
clang下的错误如下:
error: no viable overloaded operator[] for type 'const
unordered_map<int, int>'
int val = z[5];
Run Code Online (Sandbox Code Playgroud)
考虑到使用一个const vector工作正常的等效代码我有点困惑为什么我们得到这种行为.
每次我使用-XX:+PrintAssemblyHotspot时都会让我烦恼,并且必须阅读可怕的AT&T语法.
有没有办法告诉它使用英特尔语法?
我正在尝试使用自我托管的WebAPI客户端进行通信HttpClient.使用以下代码创建客户端:
HttpClientHandler clientHandler = new HttpClientHandler()
{
UseDefaultCredentials = true,
PreAuthenticate = true
};
var client = new HttpClient(clientHandler);
Run Code Online (Sandbox Code Playgroud)
在服务器端我们设置:
HttpListener listener = (HttpListener)app.Properties[typeof(HttpListener).FullName];
listener.AuthenticationSchemes = AuthenticationSchemes.IntegratedWindowsAuthentication;
Run Code Online (Sandbox Code Playgroud)
在Startup文件中.
问题是我在处理请求之前得到两个(或一个预先认证后)401错误.
在提琴手中,序列看起来像这样:
First request:
Authorization: Negotiate TlRMTVNTUAABAAAAl7II4gcABwAxAAAACQAJACgAAAAGAbEdAAAAD1dTMTEzLTEyMFNXVC0xMTM=
Answer:
WWW-Authenticate: Negotiate TlRMTVNTUAACAAAADgAOADgAAAAVwonisrQOBMTKHhKwCkgCAAAAAJoAmgBGAAAABgGxHQAAAA9TAFcAVAAtADEAMQAzAAIADgBTAFcAVAAtADEAMQAzAAEAEgBXAFMAMQAxADMALQAxADIAMAAEABYAcwB3AHQALQAxADEAMwAuAGwAbwBjAAMAKgBXAFMAMQAxADMALQAxADIAMAAuAHMAdwB0AC0AMQAxADMALgBsAG8AYwAFABYAQQBMAEQASQA5ADkAOQAuAGwAbwBjAAcACACkGh0XVY3QAQAAAAA=
Second request (succeeds):
Authorization: Negotiate TlRMTVNTUAADAAAAAAAAAFgAAAAAAAAAWAAAAAAAAABYAAAAAAAAAFgAAAAAAAAAWAAAAAAAAABYAAAAFcKI4gYBsR0AAAAPfJafWSuLL0sAXYtWCynOqg==
Run Code Online (Sandbox Code Playgroud)
那么为什么我的客户端不是第一次发送正确的授权令牌,但总是需要这种两次方法?
我想在启动时指定默认顺序,但仍然允许用户通过单击列标题进行排序.遗憾的是,SortDirection属性在设置时被忽略 - 即我们得到正确的列标题箭头,但没有任何排序.
手动单击标题,可以正确排序数据,因此不是排序本身.这是我正在使用的简化版本:
<DataGrid ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=CurrentView}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Header 1" Binding="{Binding ApplicationName}"/>
<DataGridTextColumn Header="Header 2"
Binding="{Binding TotalTime}" SortDirection="Descending"/>
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
更新:我还尝试按照建议将SortDescriptions添加到ICollectionView,但没有很好的结果.这可能与我正在动态地向集合中添加新项目这一事实有关吗?即在启动时列表是空的并且慢慢填充,也许排序描述只应用一次?
c# ×5
.net ×2
c++ ×2
java ×2
.net-4.5 ×1
assembly ×1
common-lisp ×1
cx-freeze ×1
datagrid ×1
funcall ×1
http ×1
jvm-hotspot ×1
lisp ×1
nuget ×1
nuget-spec ×1
py2exe ×1
pyinstaller ×1
python ×1
wpf ×1
xaml ×1