C# Unity 下拉菜单,更改调用函数,函数查询列表返回匹配列表项

Posted

技术标签:

【中文标题】C# Unity 下拉菜单,更改调用函数,函数查询列表返回匹配列表项【英文标题】:C# Unity dropdown, on change calling a function, function query list return matching list items 【发布时间】:2017-09-08 08:16:13 【问题描述】:

其中一个简单的我的头被阻塞了。我习惯用 phpmysql 编码,我只是想不通 c# 中的简单语法。

我有一个包含商业列表的列表,因为我的 Item 类的结构如下。我有一个统一和 onchange 的下拉菜单,我有使用此选项的所选项目的类别 ID:

private void myDropdownValueChangedHandler(Dropdown target) 

int selectedIndex = myDropdown.value;

    //LOAD THE ID FROM THE CATS LIST
    string theName = myDropdown.options[selectedIndex].text;
    var result = loadJSONCats.instance.fetchItemIDByName(theName);




public Item fetchItemByID(int id)

        for (int i = 0; i < myList.Count; i++) 
            if(myList[i].ID == id)
               return myList[i];
            

        
        return null;
 

我现在需要在 mylist 中查找匹配的列表。

在 mysql 中,我会 SELECT * from mylist where term_id IN(id);

我需要从结果中创建一个新列表,这样我就可以遍历找到的项目并实例化一个预制件,该预制件将位于垂直列表元素中,每个垂直行中都有正确的数据。

我的物品类

public class Item 

    public int ID get; set;
    public string post_modified get; set;
    public string post_title get; set;
    public string post_type get; set;
    public string guid get; set;
    public string Terms_IDs get; set;
    public string City get; set;
    public string Latitude get; set;
    public string LogoID get; set;
    public string Longitude get; set;

    //public Item(int id, string post_mod, string post_title, string post_type, string terms, string meta, string guid)
    public Item(int id, string post_mod, string post_title, string post_type, string guid, string terms, string city, string latitude, string logoID, string longitude)

        this.ID = id;
        this.post_modified = post_mod;
        this.post_title = post_title;
        this.post_type = post_type;
        this.guid = guid;
        this.Terms_IDs = terms;
        this.City = city;
        this.Latitude = latitude;
        this.LogoID = logoID;
        this.Longitude = longitude;

    


术语 ID 是一个字符串,因为我的 json 代码更容易翻译。

这是我坚持的功能,

public Item findItemsByIDs(int termID)




我需要传入 item.terms 的 id 并在 :

中找到所有匹配的列表项
    public List<Item> myList = new List<Item>();

然后返回一个包含正确数据的列表并调用预制实例化以填充垂直网格,其中的行由查询中的结果填充。

我是 LINQ 的新手,对它和 Lamba 感到困惑。

这只是我通常在 sql 中很容易做的那些事情之一,但对 c# 很陌生,我在互联网上到处都是,而且进展不快。

帮助表示赞赏。

这是构造函数:

void ConstructListingDatabase()

        for (int i = 1; i < itemData.Count; i++) 
            myList.Add(new Item((int)itemData[i][0], itemData[i][1].ToString(), itemData[i][2].ToString(), itemData[i][3].ToString(), itemData[i][4].ToString(), itemData[i][5].ToString(), itemData[i][6].ToString(), itemData[i][7].ToString(), itemData[i][8].ToString(), itemData[i][9].ToString()));
        

  

【问题讨论】:

【参考方案1】:

通过使用 Linq,您可以获得包含相同 Id 的 Items

public List<Item> findItemsByIDs(int termID)

    return myList.Where(i => i.Terms_IDs.Split(',').Contains(termID.ToString())).ToList();


这将返回列表中所有Terms_IDs 中包含termIDItems

别忘了添加

using System.Linq;

【讨论】:

@Diego 我编辑了我的答案,你可以试试吗?我想这可能是你要找的。​​span> @Diego 如果你的问题解决了,你可以accept回答。【参考方案2】:

这是你需要的:

myList.Select(i => i).Where(i => int.Parse(i.Terms_IDs) == termID).ToList();

然后要返回列表,您需要将方法签名更改为:

public List<Item> findItemsByIDs(int termID)
    return  myList.Select(i => i).Where(i => int.Parse(i.Terms_IDs) == termID).ToList();

【讨论】:

非常感谢。如果没问题,请快速跟进,当我调用函数时,加工项目列表包含一个项目,但是当我循环但没有调试时? -------------------------------------------------- ------------------------------------- //查找与 CAT ID 匹配的列表 匹配项 =loadJSON.instance.findItemsByIDs(result.Term_ID); for (int i = 0; i FormatException: 输入字符串的格式不正确@Ousmane Mahy Diaw 哦,好吧,问题出在 "int.Parse()" 上,解决方法是确保 "Terms_IDs" 是一个有效数字,然后再将 "item" 对象存储到列表中.您需要在 Item 类中完成所有这些整理工作。 这些术语存储为一个字符串,因为它导致我难以将 json 映射到 item 对象。我将如何以您提到的方式更改项目类,抱歉在 c# btw 中成为菜鸟 用构造函数更新,我试图将项目类更改为 int[] Term_IDs,然后是参数和构造函数,但把它搞砸了,所以恢复了

以上是关于C# Unity 下拉菜单,更改调用函数,函数查询列表返回匹配列表项的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2 选择选项(下拉菜单) - 如何获取更改值以便可以在函数中使用?

如何使用 C# 从字符串数组制作类似枚举的 Unity 检查器下拉菜单?

以编程方式更改值时触发Dojo Select onChange事件触发

unity c#怎么调用析构函数

VS.net (c#)如何调用另一个控件的事件

如何随机调用函数unity c# [重复]