小编mic*_*ael的帖子

WCF DataMember EmitDefaultValue的值类型?(但设置我自己的默认值)

我有以下内容:

[DataContract]
public class Foo
{
    [DataMember(EmitDefaultValue = true)
    public bool Bar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

2个问题:

  1. 这里真的发生了什么因为我的bool实际上不能为空,所以如果我发出默认值那么什么呢?

  2. 我如何做到这一点,如果有人传递没有Bar部分的消息,那么我的服务器默认情况下将其设置为true而不是false?


基本上,我的bar成员不需要通过soap消息传输,如果不是,我希望它默认为true,而不是false.我不确定正确的组合,以使我的邮件大小有效(删除任何不必要的),然后将值默认为我想要的,如果它不在消息中?

wcf soap boolean default-value datamember

2
推荐指数
1
解决办法
4464
查看次数

LINQ查询 - 根据具有与字符串匹配的属性的值选择键?

我有一个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.这违背了业务逻辑,因此单元测试负责这一点.

c# linq foreach dictionary key-value

2
推荐指数
2
解决办法
5380
查看次数

.NET原始类型除了古怪?

我很好奇,所以我运行了几个测试来看看.NET如何处理溢出(我无法在任何地方找到它).我几乎希望他们吐出溢出错误而不是结果,因为老实说这些结果只是奇怪的:

  1. Int32.MaxValue + Int32.MaxValue = -2
    我知道它包装,但为什么这样做而不是抛出OverflowException?是不是"未经检查"是为了​​......忽略溢出?我对于现在未经检查的内容感到困惑,特别是因为我已经看到它用于创建哈希值.

  2. Double.PositiveInfinity + Double.NegativeInfinity = Double.NaN
    另一个奇怪的.1 + -1 = 0. 100 + -100 = 0.那么为什么Infinity + -Infinity = NaN?

  3. Double.PositiveInfinity / Double.PositiveInfinity = Double.NaN
    再次,为什么奇怪?我想这应该是1或者可能是0(b/c的极限x /无穷大= 0).事实上Double.MaxValue / Double.PositiveInfinity = 0......

  4. Double.PositiveInfinity / 0 = Infinity
    什么!?没有DivideByZeroException!?

  5. Double.MaxValue + Double.MaxValue = Infinity
    是的,这个没有抛出OverflowException,但也没有环绕?所以我猜不是所有的原始类型都像int那样.奇怪的是,我可以做一些事情Double.MaxValue + 1 = 1.79769313486232E+308.因此,增加超出双倍的MaxValue是可能的(可能会失去精度?),但是在一些未知的数字(它可能已被弄清楚 - 或已经存在)之后,它失去了显示有效数字的能力并且给予Infininty?

好吧,其余的都是重复的.我只是想知道为什么这些按照他们的方式运作?特别是Double运营商.对于我来说,能够超越MaxValue是非常意外的.

c# double int primitive overflow

2
推荐指数
2
解决办法
390
查看次数

从一个集合中获取一个页面而不会超过最后一页?

我有一个项目集合: ICollection<T> MyCollection

我想知道是否有办法获得项目的子集(分页)而不会超过最后一页...现在它返回一个空列表,因为我继续经过可用的页面.

例如,如果MyCollection有10个项目并且我要求第5页(每页3个项目),我会得到一个空集合.相反,我真的想要最后一页(恰好是第4页,1项).不知道该怎么做.如果有一种LINQ方式可以实现这一目标.

c# linq collections pagination

2
推荐指数
1
解决办法
102
查看次数

MSBuild - 如何使用Visual Studio创建/编辑构建脚本?

我似乎无法找到如何从Visual Studio中创建MSBuild脚本.谁知道怎么样?我正在使用VS Professional.

msbuild visual-studio-2010

2
推荐指数
1
解决办法
6546
查看次数

MEF - 必须以某种方式设置导入还是可能为空?

基本上我有以下几点:

[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)

首先介绍几件事:

  1. 我的应用程序是否有可能没有MEF运行时异常并将该属性保留为null?
  2. 由于属性是私有的,我应该在每个方法中检查null吗?我在想,如果有一天我决定不使用MEF并做其他事情.我仍然会确保它在实例化时不能为空,所以我还需要防范它吗?
  3. 如果它被保护了,应该给我足够的理由来防范null,因为现在扩展类可以将它设置为null.或者,这是我不应该担心的事情(其他程序员扩展我的课程并用它做蠢事).

问题2还有以下问题:我们是否应该检查null,即使我们正在检查的属性是在类中维护的(即我们应该保护我们类的状态不允许这种情况).

c# wpf mef nullreferenceexception

2
推荐指数
1
解决办法
722
查看次数

我的所有适用于iOS的ViewControllers都可以获得用户登录信息吗?

我不确定这种情况的正确模式是什么,所以我不确定在这里搜索什么...

基本上,我想让我的iOS(iPhone)应用程序始终以登录页面开始.从那里,我需要应用程序的ViewControllers的其余部分才能访问登录信息,我不知道最好的方法是...

  • 我会以某种方式创建某种形式的全局变量吗?
  • 我是否将类的实例传递给每个ViewController,并为每个ViewController提供一个属性来保存此登录信息?
  • 我是否将某些令牌存储在cache/temp/appfolder中,以便每个人可以读取以获取登录信息?

model-view-controller objective-c ios

2
推荐指数
1
解决办法
231
查看次数

ReSharper抱怨它生成的switch语句 - "无法解析符号......"

我正在使用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是什么.

那么,为什么会这样呢?

c# resharper enums switch-statement

2
推荐指数
1
解决办法
936
查看次数

NuGet Server适用于多种环境?

我正在考虑为私人订阅源设置NuGet服务器,这看起来很简单(有一个循序渐进的指南).我预见到的问题是它看起来不像是支持多种环境.

  • 在功能上是否内置了通过多种环境(测试/测试/生产)"推广"包的想法?
  • 我是否必须托管多个服务器(每个环境一个)?
  • 有没有其他解决方案,我还没有?

我主要担心的是我们更新了一个软件包并将其用于我们的测试环境,但我们不希望我们的测试版或生产环境如果出现问题就会失败...我们要等到更新被"批准"之前可用于Beta,然后是第二次批准,以使其可用于生产.

tfs environments nuget

2
推荐指数
1
解决办法
833
查看次数

C#单元测试:如何将Lazy <T> .ValueCreated设置为false?

基本上,我有一个单元测试,可以获得一个类的单例实例.我的一些测试要求我模拟这个单例,所以当我做Foo.Instance我得到一个不同类型的实例.

问题是我的检查单独传递,但整体失败,因为一个测试正在干扰另一个测试.

我尝试在我设置的TestCleanup中执行:Foo_Accessor._instance = null;但这不起作用.我真正需要的是Foo_Accessor._instance.IsValueCreated = false;(_instance是一个懒惰的人).

有没有办法取消我没想到的Lazy对象?

c# singleton unit-testing lazy-evaluation

1
推荐指数
1
解决办法
993
查看次数