我正在使用 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;
}
