我正在使用C#,我以为我终于有机会了解Generic类型。我有几个需要相同静态方法的强类型对象。与其为每种类型创建一个静态方法,我不认为我可以使它通用。我从未做过的事情,也是我真正想要的。
这是我调用它的地方。
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项中的值,以便进行比较。它确实通过了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; }
}
然后让我的预订课程都继承了所有人的共同点。像这样...
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
}
}
然后终于在相应的控制器动作中做了类似的事情。
RoomController ...
Utilities.GetDuplicates<RoomBookingModel>(roomBookings);
VehicleController...。
Utilities.GetDuplicates<VehicleBookingModel>(vehicleBookings);
这基本上就是我们以这种方式使用泛型的方式吗?
最佳答案
编译器没有提示T
是什么类型。如果您具有具有bookingId
属性的基类(或接口),例如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;
}
关于c# - 尝试利用通用<T>集合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35224642/