小编Lar*_*sen的帖子

为什么C#(4.0)不允许泛型类的共同和逆变?

这种限制的真正原因是什么?这只是必须完成的工作吗?概念上难吗?这不可能吗?

当然,人们不能在字段中使用类型参数,因为它们总是读写.但这不是答案,可以吗?

这个问题的原因是我在C#4上写了一篇关于方差支持的文章,我觉得我应该解释为什么它仅限于委托和接口.只是为了逆转举证责任.

更新: 埃里克问了一个例子.

怎么样(不知道这是否有意义,但是:-))

public class Lookup<out T> where T : Animal {
  public T Find(string name) {
    Animal a = _cache.FindAnimalByName(name);
    return a as T;
  }
}

var findReptiles = new Lookup<Reptile>();
Lookup<Animal> findAnimals = findReptiles;
Run Code Online (Sandbox Code Playgroud)

在一个类中拥有它的原因可能是类本身中保存的缓存.请不要将您的不同类型的宠物命名为相同!

顺便说一句,这让我想到了C#5.0中的可选类型参数 :-)

更新2:我没有声称CLR和C#应该允许这个.只是想了解是什么原因导致它没有.

c# generics covariance contravariance c#-4.0

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

PL/SQL预编译和自动构建环境中的代码质量检查?

我们使用Hudson和Maven构建软件.我们有C#,java和last,但并非最不重要的PL/SQL源(sprocs,package,DDL,crud)

对于C#和Java,我们进行单元测试和代码分析,但在实际将它们发布到目标数据库之前,我们并不真正了解PL/SQL源的健康状况.

要求

有几件事我们不想在以下优先级中测试:

  1. 来源是否有效,因此"可编辑"?
  2. 对于包,对于某个数据库,它们会编译吗?
  3. 代码质量:我们是否存在代码缺陷,如重复,过于复杂的方法或违反规定的规则集?

也,

  • 该工具必须运行无头(命令行,蚂蚁,...)
  • 我们想对部分代码库进行分析(仅限更改源)

工具

我们做了一些研究,发现了以下可以提供帮助的工具:

到目前为止,Toad for Oracle和Sonar似乎是一个优雅的解决方案.但可能我们在这里遗漏了什么?

有任何想法吗?其他产品?经验?

有关SO的相关问题:

oracle build-automation continuous-integration plsql code-analysis

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

如何使用城堡windsor覆盖组件?

我想在给定的windsor容器中重新定义(默认)实现.那是OverWrite的用途吗?但不起作用.

container.Register(
                    Component.For<IServiceOperationAuthorization>()
                            .OverWrite()
                            .Instance(_authorization)
                    );
Run Code Online (Sandbox Code Playgroud)

还有其他想法吗?

欢呼,拉尔斯

castle-windsor castle ioc-container inversion-of-control

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

如何在Visual Studio的R#Unit Test Session窗口中输出单元测试的彩色文本?

如何在Visual Studio的ReSharper单元测试会话窗口中输出单元测试的彩色文本.我正在使用Resharper VS addin,我认为它会产生单元测试窗口.

我在nunit中使用它,并希望使用c#Console.Write为此窗口生成彩色文本.

c# resharper nunit visual-studio-2008

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

NHibernate通过session.Load()创建代理,但不通过Linq或Criteria API创建代理

我目前的项目有一个奇怪的问题.延迟加载查询不起作用.当我查询列表时,nhibernate分别获取所有关联.

我提取了它的一小部分并将其放入一个单独的解决方案中.基本上我现在拥有的是一个Account-Table和一个AccountSync-Table.两者都有ID和URL,而ID只是db-guid.

我的课程是:

public class HippoAccount
{
    public virtual Guid Id { get; set; }
    public virtual string Url { get; set; }
    public virtual HippoAccountSync Sync { get; set; }
}

public class HippoAccountSync
{
    public virtual Guid Id { get; set; }

    public virtual string Url { get; set; }
    public virtual HippoAccount Account { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我现在通过它的guid加载一个对象时:

var account = session.Load<HippoAccount>(accountId);
Console.WriteLine(NHibernateUtil.IsPropertyInitialized(account, "Sync"))
Run Code Online (Sandbox Code Playgroud)

...它返回false并且帐户本身是代理.

但是当通过条件API加载列表时:

var account = (HippoAccount)session
    .CreateCriteria(typeof (HippoAccount))
    .Add(Restrictions.Eq("Id", accountId)) …
Run Code Online (Sandbox Code Playgroud)

nhibernate lazy-loading criteria

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

如何基于时间和计数进行缓冲,但如果没有事件发生则停止计时器

我每秒树生成50个项目的序列.然后我想在最多20个项目中批量处理它们,但在释放缓冲区之前也不要等待超过一秒钟.

这很棒!

但是由于间隔永远不会消失,Buffer会持续发射空批量块...

我怎么能避免这种情况?舒尔Where(buf => buf.Count > 0)应该有所帮助 - 但这似乎是一个黑客.

Observable
    .Interval(TimeSpan.FromSeconds(3))
    .Select(n => Observable.Repeat(n, 50))
    .Merge()
    .Buffer(TimeSpan.FromSeconds(1), 20)
    .Subscribe(e => Console.WriteLine(e.Count));
Run Code Online (Sandbox Code Playgroud)

输出:

0-0-0-20-20-10-0-20-20-10-0-0-20-20
Run Code Online (Sandbox Code Playgroud)

system.reactive

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

您如何看待模型驱动的软件开发?

我真的很想知道您对Java和/或.NET的模型驱动软件开发的看法.

它能节省时间吗?它是否提高了质量?

mdsd model-driven-development

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

那么C#5.0中的可选泛型类型参数呢?

只是一个想法.

在C#中使用可选类型参数不是很有用吗?

这会让生活更简单.我厌倦了多个具有相同名称但类型参数不同的类.另外VS不支持这个非常vell(文件名):-)

例如,这将消除对非通用IEnumerable的需求:

interface IEnumerable<out T=object>{
  IEnumerator<T> GetEnumerator()
}
Run Code Online (Sandbox Code Playgroud)

你怎么看?

c# generics

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

如何将当前的powershell管道对象"$ _"作为命令行arg传递?

我正在尝试在一组管道文件上设置所有svn:property:

dir * -include *.cs | Select-String -simplematch -pattern "HeadURL$" | select filename | svn propset svn:keywords "HeadURL Id LastChangedBy LastChangedRevision" $_
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

svn: Try 'svn help' for more info
svn: Explicit target required ('HeadURL Id LastChangedBy LastChangedRevision' interpreted as prop value)
Run Code Online (Sandbox Code Playgroud)

问题是,$ _没有传递给svn propset ...

该怎么办?

svn powershell

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