2011-06-21 56 views
0

我有一個由父/子關係(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

我認爲這將做到這一點:

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