Ano*_*ous 4 .net c# generics list
我有两个类,X和Y.这两个类具有相同的类似属性,如下所示.
class X
{
public string T1 { get; set; }
public string T2 { get; set; }
public string T3 { get; set; }
}
class Y
{
public string T1 { get; set; }
public string T2 { get; set; }
public string T3 { get; set; }
public string O1 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有几百个类似于X和Y的类; 类似的结构,我决定为这个问题创建泛型类.
我有X和Y的列表,我想用T1比较它们; 只有1个属性,找出两个列表中存在哪个元素,哪个元素仅存在于X上且仅存在于Y上.
我怎样才能做到这一点?
最好的办法是首先创建一个T1仅包含的接口.然后,你继承每个类像X,并Y从该接口.现在,您可以基于此接口轻松创建泛型类或任何帮助程序类.
或者,您可以使用反射,或者如果您使用C#4.0,则可以使用dynamic.经典反射是减慢(大)列表的方法,因此除非您缓存方法调用,否则不应采用该方法.然而,C#4.0提供了通过DLR的方法缓存,这在大多数情况下足够快.
或者(2):当您想要"正确"执行此操作并且希望使用LINQ等标准机制比较列表时,您应该实现IComparable.您可以将其与泛型组合以创建类型安全性.
// the interface, inherit from IComparable
public interface IX : IComparable<IX>
{
string T1 { get; set; }
}
// create one base class
class XBase : IX
{
public string T1 { get; set; }
public int CompareTo(IX obj)
{
return this.T1.equals(obj.T1);
}
}
// inherit all others from base class
class X : XBase
{
public string T2 { get; set; }
public string T3 { get; set; }
}
class Y : XBase
{
public string T2 { get; set; }
public string T3 { get; set; }
public strign O1 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
还有很多其他方法.上面的最后一个方法的优点是只有一次为逻辑编写T1和CompareTo,这样可以避免混乱,并在代码中创建清晰度.
| 归档时间: |
|
| 查看次数: |
597 次 |
| 最近记录: |