【问题标题】:How to create a function which eliminates repeated code如何创建一个消除重复代码的函数
【发布时间】:2015-01-20 15:58:15
【问题描述】:

我的Page_Load 函数中有以下代码:

string[] strArrayForEntity;
string[] strArrayForLocation;
string[] strArrayForSpecialty;
int inCounter;
inCounter = 0;

strArrayForEntity = new string[Entity.Items.Count];
foreach (ListItem li in Entity.Items)
{
    strArrayForEntity[inCounter] = li.Value;
    inCounter++;
}

inCounter = 0;
strArrayForLocation = new string[Location.Items.Count];
foreach (ListItem li in Location.Items)
{
    strArrayForLocation[inCounter] = li.Value;
    inCounter++;
}

inCounter = 0;
strArrayForSpecialty = new string[Specialty.Items.Count];
foreach (ListItem li in Specialty.Items)
{
    strArrayForSpecialty[inCounter] = li.Value;
    inCounter++;
}

如您所见,除了数组名称和下拉列表 ID 之外,我在重复同样的事情。

我想创建一个函数,我可以在其中提供数组名称和下拉列表,这样我就不必重复代码了。我尝试了以下方法:

public void AddTooArray(string[] strArrayName, DropDownList strID)
{
    inCounter = 0;
    foreach (ListItem li in strID.Items)
    {
        strArrayName = li.Value;
        inCounter++;
    }
}

我打算这样称呼它:AddToArray(strArrayForEntity, Entity);

我在这一行得到错误:strArrayName = li.value; 错误:Cannot implicitly convert type 'string' to 'string[]'

我可以解决这个问题吗?

测试代码:

protected void Page_Load(object sender, EventArgs e)
{
    strArrayForEntity = new string[Entity.Items.Count]; //count is 1 (2 entries in the dropdownlist)
    AddToArray(strArrayForEntity, Entity);
    MessageBox.Show(strArrayForEntity.Length.toString()); //displays 0
}
public void AddToArray(string[] strArrayName, DropDownList strID)
{
    inCounter = 0;
    foreach (ListItem li in strID.Items)
    {
        strArrayName[inCounter] = li.Value;
        inCounter++;
    }
}

【问题讨论】:

    标签: c# asp.net arrays


    【解决方案1】:

    您忘记了数组索引器。

    strArrayName[inCounter] = li.Value;
    

    【讨论】:

    • 啊啊啊啊啊……就这么简单? ://
    • 发生在每个人身上,伙计!
    • 答案是正确的,但是你必须确保之前已经设置了数组才能调用你的方法“AddTooArray”。
    • 我最终使用了@sergeys 解决方案,因为它更简单。我为您的帖子 +1,因为它确实对我的功能有所帮助。非常感谢您的回复。
    【解决方案2】:

    只需使用 LINQ:

    string[] strArrayForEntity = Entity.Items.Cast<ListItem>().Select(i => i.Value).ToArray();
    

    注意ListItemCollection没有实现IEnumerable&lt;T&gt;,所以需要显式添加Cast&lt;ListItem&gt;()

    【讨论】:

    • 我收到此错误:'System.Web.UI.WebControls.ListItemCollection' does not contain a definition for 'Select' and no extension method 'Select' accepting a first argument of type 'System.Web.UI.WebControls.ListItemCollection' could be found (are you missing a using directive or an assembly reference?)
    • @SearchForKnowledge 添加using System.Linq; 使Select 扩展方法可用。
    • 我的页面顶部有using System.Linq;
    • 这不是问题。 ListItemCollection 没有实现 IEnumerable&lt;T&gt; 你需要 Entity.Items.Cast&lt;ListItem&gt;().Select(i =&gt; i.Value).ToArray();
    • @Selman22 对,我已经更新了我的答案。感谢您注意到这一点!
    猜你喜欢
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    • 2017-06-29
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多