在下面的代码中是一个在线问题,entities = doSpecialStuff(entities);
因为我在我的doSpecialStuff()
Methode部分“遗漏”了一些东西
Error
The type 'T' cannot be used as type parameter 'T' in the generic type or method
'myWorkClass<T>.doSpecialStuff<T>(IEnumerable<T> entities)'. There is no implicit
reference conversion from 'T' to 'ISpezial'.)
代码
这是我的惯性结构
public class Baseclass { }
public interface ISpezial
{
int mySpecial{get;set;}
}
public class Class1 : Baseclass { }
public class Class2 : Baseclass, ISpezial
{
public int mySpecial{ get;set;}
}
这是我的数据提供者
public class myRepository
{
public static IEnumerable<TResult> Load<TResult>() where TResult : Baseclass, new()
{
List<TResult> myEnum = new List<TResult>();
if (typeof(ISpezial).IsAssignableFrom(typeof(TResult)))
{
myEnum.Add((new Class2() { mySpecial = 0 }) as TResult);
myEnum.Add((new Class2() { mySpecial = 1 }) as TResult);
myEnum.Add((new Class2() { mySpecial = 2 }) as TResult);
}
else
{
myEnum.Add((new Class1() as TResult));
myEnum.Add((new Class1() as TResult));
myEnum.Add((new Class1() as TResult));
}
return myEnum;
}
}
那里的班级像老板一样做事并提供错误
public class myWorkClass<T> where T : Baseclass, new()
{
public void doNormalStuff()
{
var entities = myRepository.Load<T>();
if (typeof(ISpezial).IsAssignableFrom(typeof(T)))
{
entities = doSpecialStuff(entities);
}
}
public IEnumerable<T> doSpecialStuff<T>(IEnumerable<T> entities) where T : ISpezial
{
var list = new List<T>();
return list.Where(special => special.mySpecial==2);
}
}
一些进一步的问题
我怎样才能避免new()
在我的位置?
以及如何更改 Add 部分myRepository
而myEnum.Add(new Class1());
不是myEnum.Add((new Class1() as TResult));
更改 return IEnumerable<TResult>
?