通用参数问题

时间:2011-06-21 14:59:38

标签: c# generics

我有一个业务模型,它包含父/子关系(Identifier / IdentifierValue)以及一些看起来相同的快照类(IdentifierSnapshot / IdentifierValueSnapshot)。

我正在尝试创建一个扩展方法,该方法将在Identifier或IdentifierSnapshot的枚举上工作,但我无法确定在插入XXX占位符的扩展方法中放入什么。

//Interfaces
public interface IIdentifier<TIdentifierValue>
  where TIdentifierValue : IIdentifierValue
{
  string Code { get; }
  IEnumerable<TIdentifierValue> GetValues();
}

public interface IIdentifierValue
{
  string Code { get; }
  string Value { get; }
}

//Main classes
public class Identifier : IIdentifier<IdentifierValue>
{
  public string Code { get; set; }
  public IEnumerable<IdentifierValue> GetValues();
}

public class IdentifierValue : IIdentifierValue
{
  public string Code { get; set; }
  public string Value { get; set; }
}

//Snapshots
public class IdentifierSnapshot : IIdentifier<IdentifierValueSnapshot>
{
  public string Code { get; set; }
  public IEnumerable<IdentifierValueSnapshot> GetValues();
}

public class IdentifierValueSnapshot : IIdentifierValue
{
  public string Code { get; set; }
  public string Value { get; set; }
}

public static IdentifierExtensions
{
  public static IEnumerable<XXX> ByCode<XXX>(this IEnumerable<XXX> instance, string code)
  {
    return instance.Where(x => string.Compare(code, x.Code, true) == 0);
  }
}

1 个答案:

答案 0 :(得分:1)

我认为这样做会:

public static IEnumerable<T> ByCode<T,Z>(this IEnumerable<T> instance, string code)
    where T:IIdentifier<Z> 
    where Z:IIdentifierValue