Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在运行时创建类的实例 我创建了一个类(ConflictingBooking),其中包含与特定预订相关的各种信息的字段 我在数据库中循环,并根据特定的条件选择特定的预订 我想创建一个具有所选特定条件的类实例 然后,我想将这些类实例中的每一个都添加到一个列表中,我将在其他地方使用它_C# - Fatal编程技术网

C# 在运行时创建类的实例 我创建了一个类(ConflictingBooking),其中包含与特定预订相关的各种信息的字段 我在数据库中循环,并根据特定的条件选择特定的预订 我想创建一个具有所选特定条件的类实例 然后,我想将这些类实例中的每一个都添加到一个列表中,我将在其他地方使用它

C# 在运行时创建类的实例 我创建了一个类(ConflictingBooking),其中包含与特定预订相关的各种信息的字段 我在数据库中循环,并根据特定的条件选择特定的预订 我想创建一个具有所选特定条件的类实例 然后,我想将这些类实例中的每一个都添加到一个列表中,我将在其他地方使用它,c#,C#,我的问题是在第三步。我想将新实例命名为“found[I]”,其中,对于找到的每个预订,我都会递增: ConflictingBooking found = new ConflictingBooking(); found.BookingNumber = conflictingBookingNumber; found.BookingStarts = conflictingBookingDT;

我的问题是在第三步。我想将新实例命名为“found[I]”,其中,对于找到的每个预订,我都会递增:

              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”。您的回答表明,对于要添加到列表中的项目,我不需要唯一的名称。是否正确?是的,名称在循环中有作用域,因此变量无需在循环中更改名称。循环迭代发生时,名称仅绑定到对象