我有:
var someConcreteInstance = new Dictionary<string, Dictionary<string, bool>>();
Run Code Online (Sandbox Code Playgroud)
我希望将它转换为接口版本,即:
someInterfaceInstance = (IDictionary<string, IDictionary<string, bool>>)someConcreteInstance;
Run Code Online (Sandbox Code Playgroud)
'someInterfaceInstance'是一个公共属性:
IDictionary<string, IDictionary<string, bool>> someInterfaceInstance { get; set; }
Run Code Online (Sandbox Code Playgroud)
这正确编译,但抛出运行时转换错误.
Unable to cast object of type 'System.Collections.Generic.Dictionary`2[System.String,System.Collections.Generic.Dictionary`2[System.String,System.Boolean]]' to type 'System.Collections.Generic.IDictionary`2[System.String,System.Collections.Generic.IDictionary`2[System.String,System.Boolean]]'.
Run Code Online (Sandbox Code Playgroud)
我错过了什么?(嵌套泛型类型/ Property的问题?)
我有代码需要知道集合不应该是空的或只包含一个项目.
一般来说,我想要一个表单的扩展:
bool collectionHasAtLeast2Items = collection.AtLeast(2);
我可以轻松地编写扩展,枚举集合并递增索引器,直到我达到所请求的大小,或者耗尽元素,但是LINQ框架中是否已经存在这样做?我的想法(按照发给我的顺序)是::
bool collectionHasAtLeast2Items = collection.Take(2).Count() == 2; 要么
bool collectionHasAtLeast2Items = collection.Take(2).ToList().Count == 2;
虽然采用比集合包含更多元素的行为没有定义(在文档中)Enumerable.Take方法,但它看起来像人们所期望的那样.
它不是最有效的解决方案,要么枚举一次取元素,再枚举再次计算它们,这是不必要的,或者枚举一次取元素,然后构造一个列表以获得不是枚举器的count属性-y,因为我实际上不想要列表.
它并不漂亮,因为我总是要做两个断言,首先取'x',然后检查我实际收到'x',这取决于无证件的行为.
或许我可以使用:
bool collectionHasAtLeast2Items = collection.ElementAtOrDefault(2) != null;
但是,这在语义上并不明确.也许最好的方法是使用方法名称来包装它,这意味着我想要的东西.我假设这将是有效的,我没有反映在代码上.
其他一些想法正在使用Last(),但我明确地不想枚举整个集合.
或者,也许Skip(2).Any(),再次在语义上并不完全明显,但更好ElementAtOrDefault(2) != null,虽然我认为它们会产生相同的结果?
有什么想法吗?
对于Command参数,可以通过途径转义路径",但是,如果WorkingDirectory参数中有空格,则不起作用.
有没有人有办法解决吗?
也许在调用构建任务之前更改我的环境HOMEDRIVE\ HOMEPATH设置,但这太可怕了,可能不是微不足道的.
以下是如何将连接字符串注入IDbContextFactory的实例?和几个基本相似的问题,我想知道IDbContextFactory<T>实体框架迁移的重点是什么.
根据MSDN IDbContextFactory<T>所有关于设计时支持,这与Code-First Migrations似乎并不特别相关.
实现的任何工厂类必须自己实现默认构造函数(这是EF/Migrations使用的默认构造函数),并且必须实现泛型T Create()方法.这似乎是一个重复的抽象,我看不到它增加了任何东西(也许这对于设计时方法来说是必要的.)
这意味着没有办法进行任何构造函数注入,这意味着我实际上不能真正使用它,因为各种参数(包括但不限于nameOrConnectionString直到运行时才知道).另请参见Entity Framework 4.3.1迁移始终调用默认构造函数并忽略connectionstring和手动将DbContext提供给DbMigrator.一堆黑客.
随着EF尤其是,IoC在所有和Dependency Injection专门似乎总是在后的思想,如果在所有.
在WPF中,为了在代码中添加一个FixedPage,FixedDocument需要:
var page = new FixedPage();
var pageContent = new PageContent();
((IAddChild)pageContent).AddChild(page);
Run Code Online (Sandbox Code Playgroud)
但这似乎是唯一的方法:
MSDN文档明确表示不应该这样做('此API支持.NET Framework基础结构,并不打算直接在您的代码中使用.'- PageContent.IAddChild.AddChild方法).
为了添加内容,必须转换为显式接口实现是很难看的PageContent.
执行基本操作并不简单PageContent.
文档实际上没有解释如何执行此操作,我找不到有关如何执行此操作的任何其他信息.还有另外一种方法吗?一个'正确'的方式?
Resharper非常棒,就像任何fule kno一样.
但是,如果我声明一个方法:
private void MethodName() { //code in here }
Run Code Online (Sandbox Code Playgroud)
或者枚举:
public enum SomeEnum { Value1, Value2 }
Run Code Online (Sandbox Code Playgroud)
Resharper不建议删除冗余访问修饰符......为什么不呢?
在TFS中,我添加了一个VS项目(无论是否要将该项目添加到源代码管理中)。我知道自己的位置有误,因此我想将源代码控制文件夹移动到正确的位置。
但是,“移动”的TFS选项将变灰,直到签入项目。TFS强迫我签入吗?如果是,为什么?
就像上面说的那样.我想知道它是如何不同的.作为微软的产品,它是否与更常见的框架做类似的事情,但是使用新的名称,或略有不同; 只是显然难以实现...例如MsTest.
它有多成熟?生产准备好了吗?它意味着比Moq等更多(像MsTest不仅仅是一个单元测试框架).它是否覆盖了相同的嘲弄场地.它会做些更糟糕的事吗?更好?
我正在考虑看看它,但是在这些日子里有如此多的框架,我想知道它的好处是什么.