我在这里看到了类似的问题,但它们似乎都非常具有语境性,到目前为止,我已经很难解决这个问题了。如果这是一个重复的问题或者非常简单,那么对于C#和剃刀模板来说仍然是新手,所以道歉!
我要做的是在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*@
}
答案 0 :(得分: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&#39; .Sum
执行此操作:
int desiredWidth = 12;
if(columnOptions.Columns.Sum(col => int.Parse(col.Width)) > desiredWidth)
{
/* ... */
}
如果您不确定宽度是否为有效的int,您可以执行与this answer中第二个代码snipet类似的操作:
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)))