如何从字符串中获取索引

时间:2015-01-02 16:04:10

标签: c#

我有一些字符串,我想从中获取索引编号。

以下是示例。

        var x = "FundList[10].Amount";
        var y = "FundList[11].Amount";
        var z = "FundList[15].Amount";

我只想获得10,11,15并将它们放入Int。

数组中

目前,我正在使用一种愚蠢的方式,即取代" FundList [","]"和"。关于"用""。

我想知道是否有更好的方法可以这样做。

非常感谢你们。


我试图让问题变得尽可能简单,看起来确实会造成一些混乱。

这是我的代码。

这是我的PartialView的一部分。

    @{
    var txtIndexName = "FundList[" + Model.Index + "].Index";
    var txtAmountName = "FundList[" + Model.Index + "].Amount";
    var dropFiscalYearName = "FundList[" + Model.Index + "].FiscalYear";
}

Amount: <input type="text" name="@txtAmountName" id="@txtAmountName" /> 

以下是调用PartialView的JavaScript。每次用户点击锚链接时,都会调用PartialView。

function LoadContractOptionFundingPlanBlockByIndexNumber(indexNumber) {

$.ajax({
    type: "POST",
    url: "/Json/LoadContractOptionFundingPlanPartialView",
    data: JSON.stringify({ index: indexNumber }),
    contentType: "application/json; charset=utf-8"
}).success(function (result) {

    $("#ContractOptionFundingPlanBlock").append(result);

});

}

function GenerateOptionFundingPlanBlock() {
$("#lnkAddFundingBlock").click(function () {

    LoadContractOptionFundingPlanBlockByIndexNumber(currentIndexNumber);
    currentIndexNumber++;
});

}

$(document).ready(function () {

GenerateOptionFundingPlanBlock();

});

var currentIndexNumber = 10;

这是我的观点。

<form action="#" method="post" name="formCreateContracOption" id="formCreateContracOption">

@Html.AntiForgeryToken()

@Html.LabelForRequired(x=>x.ThisContractOption.OptionName)
@Html.ValidationMessageFor(x=>x.ThisContractOption.OptionName)
@Html.TextBoxFor(x=>x.ThisContractOption.OptionName) <br/><br/>

Period of Performance

@Html.TextBoxFor(x=>x.ThisContractOption.OptionStartDate)
@Html.TextBoxFor(x=>x.ThisContractOption.OptionEndDate) <br /><br />

<a id="lnkAddFundingBlock" href="#">Add Funding Plan</a>  <br/><br/>

<div id="ContractOptionFundingPlanBlock"></div>

<input type="submit" id="btnCreateContractOption" name="btnCreateContractOption" value="Submit" />

毕竟,当用户点击“提交”按钮时,整个内容将被发布到控制器。

这是我的控制器。

        [HttpPost]
    public ActionResult CreateContractOption(int contractId, ContractOptionCreateEditViewModel viewModel, FormCollection form)
    {
        var fundList = new List<OptionFundingPlanObject>();

        var allOptionAmountKeyList = form.AllKeys.Where(x => x.Contains("FundList") && x.Contains("Index")).ToList();

        var indexNumberList = new List<int>();

        foreach(var thisKey in allOptionAmountKeyList)
        {
            var convertedIndex = Convert.ToInt32(Regex.Match(thisKey, @"\d+").Value);
            indexNumberList.Add(convertedIndex);
        }

        return View();
    }

我问的原因是因为它不仅仅是如何将列表发布到控制器问题。

当List以ZERO索引开头,并且每个其他索引都在序列中时,它很容易处理。

在我的情况下,用户可以通过调用我的部分视图来生成新选项。用户将能够删除生成的选项,并创建一个新选项。索引然后改变了。在这种情况下,我必须找到一种解决问题的方法

谢谢大家的回复。

问题已经解决了。

2 个答案:

答案 0 :(得分:5)

var x = "FundList[10].Amount";
int xIndex = Convert.ToInt32(Regex.Match(x,@"\d+").Value); //10

但这是一个奇怪的问题。你在做什么? :)

答案 1 :(得分:0)

如果你更喜欢LINQ语法到Regex:

var x = "FundList[10].Amount";
int n = Int32.Parse(new string(x.Where(c => Char.IsDigit(c)).ToArray()));  //10