我想问一下是否有人可以帮助我。
我有基础通用类
public class Base<T> where T : new()
{
public int ID { get; set; }
public string Name { get; set; }
public virtual string Foo()
{
throw new NotImplementedException("");
}
}
然后我
public class A : Base<A>
{
public override string Foo()
{
return string.Empty;
}
}
在我的主要代码中,我想做类似的事情:
A entity = new A();
var x = entity.Foo();
List<A> entityList = new List<A>();
var y = entityList.Foo();
我的代码适用于实体和x,但我想重载Foo以便在列表中调用。有人可以帮忙吗?
答案 0 :(得分:2)
对于这样的事情(当你需要扩展现有的类而不修改它的源代码时)你可以创建extension method,例如
public static class BaseExtensions
{
public static string Foo<T>(this IEnumerable<Base<T>> items) where T : new()
{
var builder = new StringBuilder();
foreach (var item in items)
{
builder.Append(item.Foo());
}
return builder.ToString();
}
}
连接数组/列表中所有 Foo 项的结果。