为什么在以下代码的情况下行为会发生变化
public class Repository<T> : IRepository<T> where T : BaseEntity, IDisposable
和
public class Repository<T> : IDisposable, IRepository<T> where T : BaseEntity
如果我将实现类留空,在上面的例子中它不希望我实现Dispose()方法。但是,在下面需要实现Dispose()方法。 以下是完整的测试代码:
public interface Itest<T> where T: testA{ }
public class testA { }
public class test2<T> : Itest<T> where T : testA,IDisposable{ } //successfully compiled
public class test3<T> : IDisposable, Itest<T> where T : testA { }//Failed compiled : need to implement Dispose()
答案 0 :(得分:3)
当你有
时public class Repository<T> : IRepository<T> where T : BaseEntity, IDisposable
然后T
必须实施IDisposable
。
当你有
时public class Repository<T> : IDisposable, IRepository<T> where T : BaseEntity
然后Repository
必须实施IDisposable
。
如果要创建test2<T>
的实例,则应提供从testA
派生并实现IDisposable
的通用参数。
答案 1 :(得分:1)
在第一个代码示例中,IDisposable
必须实现Repository
。在第二个代码示例中,IDisposable
本身必须实现var array1 =
[
{
"id": 1,
"name": 'One'
},
{
"id": 2,
"name": 'Two'
}
];
var array2 =
[
{
"id": 1,
"name": 'Uno'
},
{
"id": 3,
"name": 'Three'
}
];
function mapArrays(arr1, arr2) {
var tmp = _.map(arr1, function(val) {
var o = _.first(_.filter(arr2, function(a2) { return a2.id === val.id; }));
return !!o ? o : val;
});
return _.union(tmp, _.filter(arr2, function(val) { return !_.some(tmp, function(a2) { a2.id == val.idl }); }));
}
var final = mapArrays(array1, array2);
console.log(final);
。