我尝试实现的是,我有一个资产名称和多个切换的列表,切换表示资产文件的扩展名,如果选中了切换,则在列表中查找不包含此扩展名的资产名称。
下面是我的代码,它确实工作了,但是看起来很愚蠢,因为如果我再添加一个toggle,我就必须再添加一个if...else...而且我使用的方法似乎只是运行了很多重复的代码,有没有其他方法,比如枚举、结构或其他方法,我可以使用来使代码更智能?
我面临一些更具体问题:
1.如何使用切换的标签作为匹配资产名称的键?
1.如何使一个方法适用于所有情况,如果我有更多的切换,因为它可能有三个或更多的关键字值,我必须匹配。
如果TGA点击-〉bbb.png、ccc.tif、qqq.exr
如果TGA和PNG点击-〉ccc.tif,qqq.exr
class ShowAssetIds:EditorWindow
{
[MenuItem("Assets/Test")]
static void ShowWindow()
{
ShowAssetIds window = (ShowAssetIds)EditorWindow.GetWindow(typeof(ShowAssetIds));
window.Show();
}
bool tga = false;
bool png = false;
List<string> temp = new List<string> { "xxx.tga", "bbb.png", "ccc.tif", "qqq.exr" };
private void OnGUI()
{
if(GUILayout.Button("MatchString"))
{
if(tga & png)
{
foreach(var v in temp)
{
if(!v.Contains("tga") && !v.Contains("png"))
{
Debug.Log(v);
}
}
}
else
{
if(tga)
{
foreach (var v in temp)
{
if (!v.Contains("tga"))
{
Debug.Log(v);
}
}
}
else
{
foreach (var v in temp)
{
if (!v.Contains("png"))
{
Debug.Log(v);
}
}
}
}
}
tga = EditorGUILayout.ToggleLeft("TGA", tga);
png = EditorGUILayout.ToggleLeft("PNG", png);
}
}
1条答案
按热度按时间fdbelqdn1#
使此代码更易于扩展的一种方法是创建一个要查找的扩展名列表。
分别检查每个标志,如果为true,则添加与该标志相关的扩展名。
然后使用一些Linq或嵌套循环来查找所有匹配项。