【发布时间】:2016-02-05 12:46:46
【问题描述】:
我正在使用 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
各种答案我所做的一切都是基于您提供的所有真正有用的帮助。我使用了安德森皮门特尔。我可能仍然不合时宜,但想在这里获得任何人的想法。
所以基本上我有几个预订模型,都需要检查重复。我真的很想以这种方式理解泛型。所以我做的是。创建了一个基类。
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
}
}
然后终于在相应的控制器动作中做了这样的事情。
房间控制器...
Utilities.GetDuplicates<RoomBookingModel>(roomBookings);
VehicleController....
Utilities.GetDuplicates<VehicleBookingModel>(vehicleBookings);
这基本上就是我们以这种方式使用泛型的方式吗?
【问题讨论】:
-
你的问题到底是什么?
-
如何用这条线构建它?
var myVal item.bookingId -
如果每个对象都有一个共同的祖先,这可能会起作用。您应该创建一个接口或一个基类,让这个对象继承自它,然后让通用外观按预期工作。
-
item是T类型,而不是BookingModel类型,因此没有bookingId。泛型的意义在于您的方法适用于任何类型,而不仅仅是一种。 -
即使你可以说item.bookingId,该方法的结果仍然不是你想要的。如果您想要的是在有重复项时返回 true。
标签: c# asp.net-mvc generics