gpt4 book ai didi

c# - 如何使用泛型比较 C# 中的 X 列表和 Y 列表?

转载 作者:太空狗 更新时间:2023-10-29 23:59:25 25 4
gpt4 key购买 nike

我有 2 个类,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; }
}

我有数百个类似于 X 和 Y 的类;类似的结构,我决定为这个问题创建通用类。

我有 X 和 Y 的列表,我想通过 T1 比较它们;只有 1 个属性,找出哪个元素存在于两个列表中,哪个元素仅存在于 X 上,仅存在于 Y 上。

我该怎么做?

最佳答案

最好的办法是首先创建一个仅包含T1 的接口(interface)。然后从这个接口(interface)继承每个类,如 XY。现在您可以轻松地创建您的泛型类或基于此接口(interface)的任何辅助类。

或者,您可以使用反射,或者如果您使用 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; }
}

还有很多其他的方法。上面最后一种方法的优点是只需为 T1CompareTo 编写一次逻辑,这样可以避免困惑并使代码清晰。

关于c# - 如何使用泛型比较 C# 中的 X 列表和 Y 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3325810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com