小编her*_*ter的帖子

.NET 4中的IDictionary <TKey,TValue>不是协变的

IDictionary<TKey, TValue>在.NET 4/Silverlight 4中不支持的协方差,即我不能做

IDictionary<string, object> myDict = new Dictionary<string, string>();
Run Code Online (Sandbox Code Playgroud)

类似于我IEnumerable<T>现在可以做的事情.

可能归结为KeyValuePair<TKey, TValue>不协变.我觉得至少应该在字典中允许协方差值.

这是一个错误还是一个功能?它会不会来,也许在.NET 37.4中?

更新(2年后):

IReadOnlyDictionary<TKey, TValue>在.NET 4.5中会有一个,但它也不会是协变的:·/,因为它派生自IEnumerable<KeyValuePair<TKey, TValue>>,而KeyValuePair<TKey, TValue>不是一个接口,因此不能协变.

BCL团队将不得不重新设计出来并使用一些ICovariantPair<TKey, TValue>代替.this[TKey key]对于协变接口也不可能使用强类型索引器.类似的结束只能通过在GetValue<>(this IReadOnlyDictionary<TKey, TValue> self, TKey key)某个地方放置一个扩展方法来实现,这种方法在内部必须调用一个实际的实现,这可能看起来像一个非常混乱的方法.

.net dictionary .net-4.0 covariance

58
推荐指数
3
解决办法
7743
查看次数

商业逻辑的另一个词?

Business Logic的另一个好词是什么?

软件也可能在公务员办公室或业余爱好者中运行,因此我对在某些模块和文档中使用该术语感到不舒服.

App Logic也太具体了,因为逻辑模块也可能用在服务中.

language-agnostic terminology

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

Visual Studio Post-build事件:用于(set)命令中的%f

Visual Studio 2010 Post-build事件中的此命令

for %f in ("$(ProjectDir)$(OutDir)*.dll") do echo %f
Run Code Online (Sandbox Code Playgroud)

(echo将被其他一些工具取代)给我错误

The command "[...]" exited with code 255.
Run Code Online (Sandbox Code Playgroud)

我想我必须逃离最外面的圆括号,但我不知道如何.我试着\(((.

.net visual-studio post-build for-in-loop

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

代码契约:我们是否必须在委托方法中冗余地指定Contract.Requires(...)语句?

我打算使用新的.NET 4 Code Contracts功能进行未来的开发.这让我想知道我们是否必须Contract.Requires(...)在一系列方法中冗余地指定等效语句.

我认为一个代码示例胜过千言万语:

    public bool CrushGodzilla(string weapon, int velocity)
    {
        Contract.Requires(weapon != null);

        // long code

        return false;
    }

    public bool CrushGodzilla(string weapon)
    {
        Contract.Requires(weapon != null);   // specify contract requirement here
                                             // as well???

        return this.CrushGodzilla(weapon, int.MaxValue);
    }
Run Code Online (Sandbox Code Playgroud)

对于运行时检查它并不重要,因为我们最终总是会遇到需求检查,如果失败我们会收到错误.

但是,当我们再次在第二次超载中没有指定合同要求时,它被认为是不好的做法吗?

此外,还将具有编译时检查的功能,并且还可能设计代码合同的时间检查.在Visual Studio 2010中,它似乎尚不适用于C#,但我认为有一些类似Spec#的语言已经可以使用.当我们编写代码来调用这样的方法时,这些引擎可能会给我们提示,而我们的参数目前可以或将会是null.

所以我想知道这些引擎是否总是会分析一个调用堆栈,直到找到一个目前不满意的合同方法?

此外,在这里我了解到的区别Contract.Requires(...)Contract.Assume(...).我想在这个问题的背景下还要考虑差异呢?

.net c# .net-4.0 code-contracts

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

限制Silverlight/WPF行为可见性

在Silverlight(可能还有WPF)中,当我定义一个System.Windows.Interactivity.Behavior<T>例如a ItemsControl,就像

public class SomeAwesomaticBehavior : Behavior<ItemsControl>
{
}
Run Code Online (Sandbox Code Playgroud)

它将出现在Visual Studio的XAML编辑器中(也可能出现在Designer中),即使对于普通的非Items控件也会出现令人讨厌的运行时异常.这与仅为预期类型出现的附加属性相反.

有没有办法限制这种可见性?一些神奇的属性可能(虽然这将是一个多余的声明)?

如果今天没办法,我希望将来会有这样的事情吗?因为当弹出很多与当前对象无关的行为时,肯定会让同事和设计人员感到困惑.

更新:我已经提交了uservoice项目.

Silverlight:http://dotnet.uservoice.com/forums/4325-silverlight-feature-suggestions/suggestions/1224253-restrict-behavior-visibility? ref = title

WPF:http://dotnet.uservoice.com/forums/40583-wpf-feature-suggestions/suggestions/1224259-restrict-behavior-visibility? ref = title

silverlight wpf xaml behavior

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