C# 在运行时创建类的实例 我创建了一个类(ConflictingBooking),其中包含与特定预订相关的各种信息的字段 我在数据库中循环,并根据特定的条件选择特定的预订 我想创建一个具有所选特定条件的类实例 然后,我想将这些类实例中的每一个都添加到一个列表中,我将在其他地方使用它
我的问题是在第三步。我想将新实例命名为“found[I]”,其中,对于找到的每个预订,我都会递增:C# 在运行时创建类的实例 我创建了一个类(ConflictingBooking),其中包含与特定预订相关的各种信息的字段 我在数据库中循环,并根据特定的条件选择特定的预订 我想创建一个具有所选特定条件的类实例 然后,我想将这些类实例中的每一个都添加到一个列表中,我将在其他地方使用它,c#,C#,我的问题是在第三步。我想将新实例命名为“found[I]”,其中,对于找到的每个预订,我都会递增: ConflictingBooking found = new ConflictingBooking(); found.BookingNumber = conflictingBookingNumber; found.BookingStarts = conflictingBookingDT;
ConflictingBooking found = new ConflictingBooking();
found.BookingNumber = conflictingBookingNumber;
found.BookingStarts = conflictingBookingDT;
conflictingBookings.Add(found);
在上面的代码中,我需要以编程方式替换'found'
虽然我希望能有一个简单的代码片段,但我也想阅读一些参考资料,以便了解我在做什么:-)。我只是不知道如何用谷歌搜索我的问题
似乎我还不完全清楚-以下是适当的代码:
dbManager.Open();
dbManager.ExecuteReader(CommandType.Text, string.Format("SELECT BookingDate, {0} FROM BTable WHERE Court IN {1} AND BookingDate IN ({2})", columns, facilityIDs, bookingDates));
using (IDataReader rdr = dbManager.DataReader)
{
decimal conflictingBookingNumber = 0;
DateTime conflictingBookingDT;
object result = null;
while (rdr.Read())
{
for (int i = 0; i < requestedColumnNames.Count; i++)
{
result = dbManager.DataReader[requestedColumnNames[i].ToString()];
if (result != null)
conflictingBookingNumber = Convert.ToDecimal(result);
result = dbManager.DataReader["BookingDate"];
if (result != null)
conflictingBookingDT = Convert.ToDateTime(result);
if (conflictingBookingNumber > 0)
{
int next = conflictingBookings.Count + 1;
ConflictingBooking found = new ConflictingBooking();
found.BookingNumber = conflictingBookingNumber;
found.BookingStarts = conflictingBookingDT;
// conflictingBookings is a List<conflictingBooking>
conflictingBookings.Add(found);
}
}
}
}
dbManager.Open();
dbManager.ExecuteReader(CommandType.Text,string.Format(“选择BookingDate,{0}从BTable WHERE Court IN{1}和BookingDate IN({2})”,列,设施,BookingDate));
使用(IDataReader rdr=dbManager.DataReader)
{
十进制冲突BookingNumber=0;
日期时间冲突记账;
对象结果=空;
while(rdr.Read())
{
for(int i=0;i0)
{
int next=冲突预订。计数+1;
找到ConflictingBooking=新的ConflictingBooking();
found.BookingNumber=冲突BookingNumber;
found.BookingStarts=冲突bookingdt;
//冲突预订是一个列表
冲突预订。添加(已找到);
}
}
}
}
希望这能澄清我的问题。简单的解决方案:将循环计数器添加到构造函数中:
ConflictingBooking found = new ConflictingBooking(i);
然后添加一个方法(或重写
ToString()
)以返回字符串连接的实例名称。简单解决方案:将循环计数器添加到构造函数:
ConflictingBooking found = new ConflictingBooking(i);
然后添加一个方法(或重写
ToString()
)以返回字符串连接的实例名称。我认为您要寻找的只是将代码放入for循环中。我可能完全误解了你,但似乎你想做这样的事
int i = 0;
foreach(var result in resultSet)
{
ConflictingBooking found = new ConflictingBooking();
found.BookingNumber = conflictingBookingNumber;
found.BookingStarts = conflictingBookingDT;
found.Name = "found["+i++ +"]";
conflictingBookings.Add(found);
}
如果这不是您想要的,请澄清您的问题我认为您想要的只是将代码放入for循环中。我可能完全误解了你,但似乎你想做这样的事
int i = 0;
foreach(var result in resultSet)
{
ConflictingBooking found = new ConflictingBooking();
found.BookingNumber = conflictingBookingNumber;
found.BookingStarts = conflictingBookingDT;
found.Name = "found["+i++ +"]";
conflictingBookings.Add(found);
}
如果这不是您想要的,请澄清您的问题变量名仅为方便程序员而存在,在运行时并不真正存在。您不能在运行时生成实际变量 但是,因为您正在填充一个列表,所以您应该拥有根据索引生成用于显示目的的“名称”所需的所有数据。例如:
for(int i = 0; i < conflictingBookings.Length; i++)
{
Console.WriteLine("found[" + i + "]: " + found.BookingNumber);
}
for(int i=0;i
变量名仅为方便程序员而存在,在运行时并不真正存在。您不能在运行时生成实际变量
但是,因为您正在填充一个列表,所以您应该拥有根据索引生成用于显示目的的“名称”所需的所有数据。例如:
for(int i = 0; i < conflictingBookings.Length; i++)
{
Console.WriteLine("found[" + i + "]: " + found.BookingNumber);
}
for(int i=0;i
如果这对任何有此经验的人来说都是一个困难的解决方案,我会非常惊讶,但是我过去一直能够避免这种情况,但我认为是时候面对它了:-)。你有没有可能用我在问题中的例子发布你建议的代码。米奇-我不知道你在说什么!如果这对任何有此经验的人来说都是一个困难的解决方案,我会非常惊讶,但是我过去一直能够避免这种情况,但我认为是时候面对它了:-)。你有没有可能用我在问题中的例子发布你建议的代码。米奇-我不知道你在说什么!“以编程方式查找替换”的确切含义是什么?我的理解是,您提供的代码块将限定在某种迭代中,您将在其中填充集合。你能澄清一下吗?那么你的代码到底有什么问题?new
操作符正是这样做的——创建一个类的新实例。如果您澄清为什么需要替换变量名'found',可能会有所帮助。您对'replace find programmably'的理解是什么?我的理解是,您提供的代码块将限定在某种迭代中,您将在其中填充集合。你能澄清一下吗?那么你的代码到底有什么问题?new
操作符正是这样做的——创建一个类的新实例。如果您澄清为什么需要替换变量名“found”,可能会有所帮助。谢谢-我已经修改了我的原始帖子,添加了“loop”。您的回答表明,对于要添加到列表中的项目,我不需要唯一的名称。是否正确?是的,名称在循环中有作用域,因此变量无需在循环中更改名称。循环迭代发生时,名称仅绑定到对象