我有以下内容:
[DataContract]
public class Foo
{
[DataMember(EmitDefaultValue = true)
public bool Bar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
2个问题:
这里真的发生了什么因为我的bool实际上不能为空,所以如果我发出默认值那么什么呢?
我如何做到这一点,如果有人传递没有Bar部分的消息,那么我的服务器默认情况下将其设置为true而不是false?
基本上,我的bar成员不需要通过soap消息传输,如果不是,我希望它默认为true,而不是false.我不确定正确的组合,以使我的邮件大小有效(删除任何不必要的),然后将值默认为我想要的,如果它不在消息中?
我有一个IDictionary
我需要选择Bar.Prop1与字符串值匹配的第一个Foo.
public class Foo { }
public class Bar
{
public String Prop1 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在我有这样的...
foreach (var kvp in MyDictionary)
{
if (kvp.Value.Prop1 == theString)
{
var key = kvp.Key;
//Do something with it
break;
}
}
Run Code Online (Sandbox Code Playgroud)
但这似乎并不像LINQ Query那样干净.ReSharper把它变成了:
foreach (var kvp in MyDictionary.Where(kvp => kvp.Value.Prop1 == theString))
{
var key = kvp.Key;
//Do something with it
//break; is unnecessary because I only get one kvp back anyways.
}
Run Code Online (Sandbox Code Playgroud)
我只想要匹配的第一个项目,因为我不希望得到多个KVP.这违背了业务逻辑,因此单元测试负责这一点.
我很好奇,所以我运行了几个测试来看看.NET如何处理溢出(我无法在任何地方找到它).我几乎希望他们吐出溢出错误而不是结果,因为老实说这些结果只是奇怪的:
Int32.MaxValue + Int32.MaxValue = -2
我知道它包装,但为什么这样做而不是抛出OverflowException?是不是"未经检查"是为了......忽略溢出?我对于现在未经检查的内容感到困惑,特别是因为我已经看到它用于创建哈希值.
Double.PositiveInfinity + Double.NegativeInfinity = Double.NaN
另一个奇怪的.1 + -1 = 0. 100 + -100 = 0.那么为什么Infinity + -Infinity = NaN?
Double.PositiveInfinity / Double.PositiveInfinity = Double.NaN
再次,为什么奇怪?我想这应该是1或者可能是0(b/c的极限x /无穷大= 0).事实上Double.MaxValue / Double.PositiveInfinity = 0......
Double.PositiveInfinity / 0 = Infinity
什么!?没有DivideByZeroException!?
Double.MaxValue + Double.MaxValue = Infinity
是的,这个没有抛出OverflowException,但也没有环绕?所以我猜不是所有的原始类型都像int那样.奇怪的是,我可以做一些事情Double.MaxValue + 1 = 1.79769313486232E+308.因此,增加超出双倍的MaxValue是可能的(可能会失去精度?),但是在一些未知的数字(它可能已被弄清楚 - 或已经存在)之后,它失去了显示有效数字的能力并且给予Infininty?
好吧,其余的都是重复的.我只是想知道为什么这些按照他们的方式运作?特别是Double运营商.对于我来说,能够超越MaxValue是非常意外的.
我有一个项目集合: ICollection<T> MyCollection
我想知道是否有办法获得项目的子集(分页)而不会超过最后一页...现在它返回一个空列表,因为我继续经过可用的页面.
例如,如果MyCollection有10个项目并且我要求第5页(每页3个项目),我会得到一个空集合.相反,我真的想要最后一页(恰好是第4页,1项).不知道该怎么做.如果有一种LINQ方式可以实现这一目标.
我似乎无法找到如何从Visual Studio中创建MSBuild脚本.谁知道怎么样?我正在使用VS Professional.
基本上我有以下几点:
[Import]
private IEventAggregator EventAggregator { get; set; }
public void DoSomething()
{
//Should I bother to check for null here before using EventAggregator?
}
Run Code Online (Sandbox Code Playgroud)
首先介绍几件事:
问题2还有以下问题:我们是否应该检查null,即使我们正在检查的属性是在类中维护的(即我们应该保护我们类的状态不允许这种情况).
我不确定这种情况的正确模式是什么,所以我不确定在这里搜索什么...
基本上,我想让我的iOS(iPhone)应用程序始终以登录页面开始.从那里,我需要应用程序的ViewControllers的其余部分才能访问登录信息,我不知道最好的方法是...
我正在使用ReSharper,在生成switch语句时遇到两种情况:
public void DoWork(MyEnum value)
{
switch(value)
{
// ...
default:
throw new ArgumentOutOfRangeException("value");
}
}
public void DoWork()
{
var value = GetEnumValue();
switch(value)
{
// ...
default:
// Cannot resolve symbol 'value'
throw new ArgumentOutOfRangeException("value");
}
}
Run Code Online (Sandbox Code Playgroud)
似乎如果我将枚举值作为参数传递,ReSharper不会抱怨它生成的代码.它识别出value在异常消息中适当使用.
但是,如果我在方法中以某种其他方式获取值作为局部变量,ReSharper似乎会抱怨它生成的代码,声称"无法解析符号'值'".这是有道理的,因为它value是一个局部变量,因此捕获异常消息的消费者不知道究竟value是什么.
那么,为什么会这样呢?
我正在考虑为私人订阅源设置NuGet服务器,这看起来很简单(有一个循序渐进的指南).我预见到的问题是它看起来不像是支持多种环境.
我主要担心的是我们更新了一个软件包并将其用于我们的测试环境,但我们不希望我们的测试版或生产环境如果出现问题就会失败...我们要等到更新被"批准"之前可用于Beta,然后是第二次批准,以使其可用于生产.
基本上,我有一个单元测试,可以获得一个类的单例实例.我的一些测试要求我模拟这个单例,所以当我做Foo.Instance我得到一个不同类型的实例.
问题是我的检查单独传递,但整体失败,因为一个测试正在干扰另一个测试.
我尝试在我设置的TestCleanup中执行:Foo_Accessor._instance = null;但这不起作用.我真正需要的是Foo_Accessor._instance.IsValueCreated = false;(_instance是一个懒惰的人).
有没有办法取消我没想到的Lazy对象?
c# ×6
linq ×2
boolean ×1
collections ×1
datamember ×1
dictionary ×1
double ×1
enums ×1
environments ×1
foreach ×1
int ×1
ios ×1
key-value ×1
mef ×1
msbuild ×1
nuget ×1
objective-c ×1
overflow ×1
pagination ×1
primitive ×1
resharper ×1
singleton ×1
soap ×1
tfs ×1
unit-testing ×1
wcf ×1
wpf ×1