Skip to main content
 首页 » 编程设计

c#之尝试使用通用的 T> 集合

2024年01月31日25youxin

我正在使用 C#,我认为我终于有机会了解泛型类型。我有几个需要相同静态方法的强类型对象。我认为我可以使它通用,而不是为每种类型创建一个静态方法。我从未做过但也很想做的事情。

这里是我调用它的地方。

   bool isDuplicate = Utilities.GetDuplicates<RoomBookingModel>(roomBookings); 

这是我的静态方法,它位于名为 Utilities 的静态类中。

 public static bool GetDuplicates<T>(List<T> pBookings) 
    {            
        foreach (var item in pBookings) 
        { 
            var myVal = item.bookingId 
        } 
        return true; 
    } 

所以我想在 foreach 循环中获取 var item 中的值,以便进行比较。它肯定通过了 pBookings,因为我可以悬停并且他们有一个 .Count() 和我的强类型对象的集合。我在这里遗漏了一些东西,可能是类型转换过程。我想知道是否有人可以告诉我我的不足之处。

var myVal = item.bookingId - 我无法从 item 获取 bookingID,因为我对这里缺乏一些基本的了解。 bookingId 不存在,我只能访问扩展方法,例如 .toString 和 .equals

各种答案 我所做的一切都是基于您所有真正有用的帮助。我使用了 Anderson Pimentel。我可能仍然偏离主题,但想在这里征求任何人的想法。

所以基本上我有几个预订模型,都需要检查重复项。我真的很想以这种方式理解泛型。所以我所做的是。创建了一个基类。

public class BookingBaseModel 
{ 
    public int BookingID { get; set; } 
    public DateTime BookingStartDateTime { get; set; } 
    public DateTime BookingEndDateTime { get; set; } 
} 

然后让我的预订类(class)都继承了所有人的共同点。像这样...

public class RoomBookingModel : BookingBaseModel 
{ 
    public string RoomName{ get; set; } 
} 
 
public class vehicleBookingModel : BookingBaseModel 
{ 
    public string vehicleName{ get; set; } 
} 

然后在我的实用程序静态助手中我做了这个..

 public static void GetDuplicates<T>(List<T> items) where T : BookingBaseModel 
    { 
        foreach (var item in items) 
        { 
            int myId = item.ID; 
            DateTime startDateTime = item.BookingStartDateTime; 
            DateTime endDateTime = item.BookingEndDateTime; 
 
            //Do you logic here 
        } 
    } 

然后最终在相应的 Controller 操作中做了类似的事情。

房间 Controller ...

        Utilities.GetDuplicates<RoomBookingModel>(roomBookings); 

车辆 Controller ....

        Utilities.GetDuplicates<VehicleBookingModel>(vehicleBookings); 

这就是我们以这种方式使用泛型的基本方式吗?

请您参考如下方法:

编译器没有提示T 是什么类型。如果您有一个具有 bookingId 属性的基类(或接口(interface)),例如 BaseModel,您可以像下面这样限制泛型类型:

public class BaseModel 
{ 
    public int Id { get; set; } 
} 
 
public static bool GetDuplicates<T>(List<T> items) where T : BaseModel 
{            
    foreach (var item in items) 
    { 
        var myId = item.Id; 
        //Do you logic here 
    } 
    return true; 
}