这种限制的真正原因是什么?这只是必须完成的工作吗?概念上难吗?这不可能吗?
当然,人们不能在字段中使用类型参数,因为它们总是读写.但这不是答案,可以吗?
这个问题的原因是我在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#应该允许这个.只是想了解是什么原因导致它没有.
我们使用Hudson和Maven构建软件.我们有C#,java和last,但并非最不重要的PL/SQL源(sprocs,package,DDL,crud)
对于C#和Java,我们进行单元测试和代码分析,但在实际将它们发布到目标数据库之前,我们并不真正了解PL/SQL源的健康状况.
有几件事我们不想在以下优先级中测试:
也,
我们做了一些研究,发现了以下可以提供帮助的工具:
到目前为止,Toad for Oracle和Sonar似乎是一个优雅的解决方案.但可能我们在这里遗漏了什么?
有任何想法吗?其他产品?经验?
oracle build-automation continuous-integration plsql code-analysis
我想在给定的windsor容器中重新定义(默认)实现.那是OverWrite的用途吗?但不起作用.
container.Register(
Component.For<IServiceOperationAuthorization>()
.OverWrite()
.Instance(_authorization)
);
Run Code Online (Sandbox Code Playgroud)
还有其他想法吗?
欢呼,拉尔斯
如何在Visual Studio的ReSharper单元测试会话窗口中输出单元测试的彩色文本.我正在使用Resharper VS addin,我认为它会产生单元测试窗口.
我在nunit中使用它,并希望使用c#Console.Write为此窗口生成彩色文本.
我目前的项目有一个奇怪的问题.延迟加载查询不起作用.当我查询列表时,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) 我每秒树生成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) 我真的很想知道您对Java和/或.NET的模型驱动软件开发的看法.
它能节省时间吗?它是否提高了质量?
只是一个想法.
在C#中使用可选类型参数不是很有用吗?
这会让生活更简单.我厌倦了多个具有相同名称但类型参数不同的类.另外VS不支持这个非常vell(文件名):-)
例如,这将消除对非通用IEnumerable的需求:
interface IEnumerable<out T=object>{
IEnumerator<T> GetEnumerator()
}
Run Code Online (Sandbox Code Playgroud)
你怎么看?
我正在尝试在一组管道文件上设置所有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 ...
该怎么办?
c# ×3
generics ×2
c#-4.0 ×1
castle ×1
covariance ×1
criteria ×1
lazy-loading ×1
mdsd ×1
nhibernate ×1
nunit ×1
oracle ×1
plsql ×1
powershell ×1
resharper ×1
svn ×1