【问题标题】:Setting a variable within a foreach statement?在 foreach 语句中设置变量?
【发布时间】:2015-10-29 15:17:51
【问题描述】:

我想将我的 foreach 语句中的一个值设置为一个变量,以便我可以解析该值。我的代码如下所示:

 @foreach (var visit in visitslist){
 CultureInfo MyCultureInfo = new CultureInfo("en-GB");
 var MyString = (visit.VisitDate);
 DateTime MyDateTime = DateTime.Parse(MyString, MyCultureInfo);

 <input type="text" value="@MyDateTime" />}

我遇到的麻烦是它没有拉出 visit.VisitDate 的价值。我已经尝试从数据库中手动输入一个值,并且效果很好,所以我知道这不是数据类型的问题。

【问题讨论】:

  • 您在 foreach 循环中每次都覆盖 var MyString。 string MyString = item.DateAdded?所以 item.DateAdded 的最后一个值总是会设置为 MyString。为什么它是在 foreach 循环中定义的?对吗? MyString 应该在方法体或成员变量中本地定义吗?
  • 是否抛出错误?在我看来,您正在尝试将 DateTime 值分配给字符串类型。
  • 我希望 MyString 成为我从 foreach 循环中提取数据的表中的值
  • DateAdded 的类型是什么?
  • @user1672994 从您提到的内容来看,我认为这实际上不会起作用。基本上,我需要解析日期时间字段的值,以便它以英国格式显示,而不是美国格式。上面的完整代码。

标签: c# razor


【解决方案1】:

如果 var 的类型是 DateTime,则无需在不同的文化中解析对象。如果您的应用程序特定于 en-GB 文化,那么您可以将当前线程文化设置为 Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB");。因此,当您在视图中使用 &lt;input type="text" value="@MyDateTime" /&gt; 时,它将自动以 en-GB 格式显示。

【讨论】:

    【解决方案2】:

    如果你想要在英国时间,你只需要先解析它然后用新格式打印来改变它的格式

    DateTime dt = DateTime.ParseExact(StartDate, "MM/dd/yyyy HH:mm:ss", CultureInfo.InvariantCulture);
    
    dt.ToString("dd/MM/yyyy HH:mm:ss");
    

    【讨论】:

    • 感谢您对此的帮助,尽管我收到一条错误消息,指出这不是有效的日期时间
    猜你喜欢
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    相关资源
    最近更新 更多