将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)
某个地方放置一个扩展方法来实现,这种方法在内部必须调用一个实际的实现,这可能看起来像一个非常混乱的方法.
Business Logic的另一个好词是什么?
软件也可能在公务员办公室或业余爱好者中运行,因此我对在某些模块和文档中使用该术语感到不舒服.
App Logic也太具体了,因为逻辑模块也可能用在服务中.
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 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(...)
.我想在这个问题的背景下还要考虑差异呢?
在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
.net ×3
.net-4.0 ×2
behavior ×1
c# ×1
covariance ×1
dictionary ×1
for-in-loop ×1
post-build ×1
silverlight ×1
terminology ×1
wpf ×1
xaml ×1