【问题标题】:Convert string to int, check total sum of int based on foreach loop将字符串转换为 int,根据 foreach 循环检查 int 的总和
【发布时间】:2017-04-17 17:48:14
【问题描述】:

我在这里看到了类似的问题,但它们似乎都非常符合上下文,到目前为止我在弄清楚这一点时遇到了一些麻烦。对于 C# 和 razor 模板来说仍然很新,如果这是一个重复的问题或非常简单的问题,我们深表歉意!

我要做的是在 foreach 循环中获取用户定义字符串的值,将其转换为(我假设)一个 int,为循环的每个实例添加它,然后检查总和的财产。

下面是一个简化的代码示例,可能会使这一点更清楚:

foreach (var col in columnOptions.Columns) 
{
    <div class="@col.Width">
        @*content*@
    </div>  
}
if (totalWidthValue > 12) 
{
    @*do something else*@
}

所以基本上我需要把col.Width的值,转换成int以便计算,每次出现的总和,然后检查总和是否大于12。

此外,如果有帮助,这是设置宽度的位置/方式:

[JsonSchema(Title = "Column width", Description = "Select the width of this column based on a 12 column wide grid")]
[PropertyOrder(11)]
[JsonOptions(GridColumns = 6)]
[JsonEnumValues("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12")]
[DefaultValue("12")]
[Localizable(false)]
public string Width { get; set; }

编辑: 这是我在尝试方面可以提供的内容,我担心它可能还没有完全形成,无法确定任何具体的“这就是你出错的地方”,但至少它显示了一种尝试,并且可能为我的知识差距提供了一些背景信息是(添加的部分实际上只是两个变量):

    foreach (var col in columnOptions.Columns) 
    {

        var colNum = double.TryParse(col.Width, out colNum);
        var totalWidthValue = colNum + colNum;

        <div class="@col.Width">
            @*content*@
        </div>  
    }
    if (totalWidthValue > 12) 
    {
        @*do something else*@
    }

【问题讨论】:

  • 你有没有尝试过?
  • 没有错误。说实话,我从一开始就不确定如何处理它,而且我觉得包括我自己的任何失败的尝试都会使水变得太多。就应该如何做到这一点而言,我觉得我的尝试大多与那个问题无关。
  • 但最好还是展示您尝试过的内容,否则这看起来就像“为我做我的工作”的问题
  • 但是如果我什至不确定从哪里开始呢?这是一个问答论坛,不是吗?我会看看我尝试过的东西,看看我是否可以以一种有意义的方式添加它。
  • 你想用 linq 来做。请提供显示您尝试使用 linq 的代码的 sn-p。如果它不起作用,那很好,这就是我们进来的地方,但这不应该是人们在没有付出具体努力的情况下发布的网站。您不需要全部添加,只需添加相关部分即可

标签: c# linq templates razor


【解决方案1】:

对于您的尝试:问题是使用TryParse 它返回一个bool 并有一个out 参数。然后对于总和的累积使用+=。所以代替这个:

var colNum = double.TryParse(col.Width, out colNum);
var totalWidthValue = colNum + colNum;

有这样的东西:

double colNum;
if(double.TryParse(col.Width, out colNum))
    totalWidthValue += colNum;

使用 linq 的 .Sum 这样做:

int desiredWidth = 12;
if(columnOptions.Columns.Sum(col => int.Parse(col.Width)) > desiredWidth)
{
    /*  ... */
}

如果您不确定宽度是否是有效的 int,您可以执行类似于 this answer 中的第二个代码片段的操作:

Func<string, int, int> parseIntOrDefault = (input, defaultValue) =>
{
    int value = defaultValue;
    int.TryParse(input, out value);
    return value;
};

columnOptions.Columns.Sum(col => parseIntOrDefault(col.Width,0)))

【讨论】:

  • 这看起来很有用,会试一试。感谢您的回答,也感谢有关如何使我的问题变得更好的提示!
  • @tganyan - 查看更新您的方法有什么问题。很抱歉,您首先发布了您尝试过的内容,但这是帮助 SO 既是寻找答案的好地方又是学习工具的一部分
  • 当然,我不认为这是个人的,只是一个机会,让我们继续了解在这类帖子中哪些信息很重要。
猜你喜欢
  • 2020-10-31
  • 2013-09-10
  • 1970-01-01
  • 1970-01-01
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
  • 2013-01-07
  • 1970-01-01
相关资源
最近更新 更多