首页 > 解决方案 > c#/xml String.Contains 使用自定义类时无法正确返回字符串

问题描述

我正在尝试创建一个函数,通过搜索基本字符串,我可以在数组中找到自定义类的实例。但是,String.Contains 似乎没有在数组中的任何位置找到该字符串。

该数组由一个单独的类设置,该类将多个 Provider 类存储在一个 XML 文件中。

<ContentProviders>
   <Providers>
       <Provider>
           <Name>Roblox (Epicgamers Redirect)</Name>
           <URL>http://epicgamers.xyz/asset/?id=</URL>
           <Icon>roblox.png</Icon>
       </Provider>
       <Provider>
           <Name>Roblox (Epicgamers Redirect Shortened)</Name>
           <URL>http://epiccc.xyz/asset/?id=</URL>
           <Icon>roblox.png</Icon>
       </Provider>
       <Provider>
           <Name>Finobe</Name>
           <URL>http://finobe.com/asset/?id=</URL>
           <Icon>finobe.png</Icon>
       </Provider>
       <Provider>
           <Name>Imgur</Name>
           <URL>http://i.imgur.com/</URL>
           <Icon>imgur.png</Icon>
       </Provider>
   </Providers>
</ContentProviders>

数组加载正常,但是 String.Contains 似乎不匹配查询与 URL,即使它存在。如果我使用“http://i.imgur.com/TRGsjgo.png”之类的 URL,它将在字符串中找不到基本 URL“http://i.imgur.com/”。

有没有什么办法解决这一问题?

代码:

#region Content Provider Options
public class Provider
{
    public string Name;
    public string URL;
    public string Icon;
}

[XmlRoot("ContentProviders")]
public class ContentProviders
{
    [XmlArray("Providers")]
    public Provider[] Providers;
}

public class OnlineClothing
{
    public static Provider[] GetContentProviders(string filename)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(ContentProviders));

        FileStream fs = new FileStream(filename, FileMode.Open);
        ContentProviders providers;
        providers = (ContentProviders)serializer.Deserialize(fs);

        return providers.Providers;
    }

    public static Provider FindContentProviderByName(Provider[] providers, string query)
    {
        return providers.SingleOrDefault(item => item.Name.Contains(query));
    }
    
    public static Provider FindContentProviderByURL(Provider[] providers, string query)
    {
        return providers.SingleOrDefault(item => item.URL.Contains(query));
    }

    public static string GetURLForProvider(Provider provider)
    {
        return provider.URL;
    }

    public static string GetNameForProvider(Provider provider)
    {
        return provider.Name;
    }

    public static string GetIconNameForProvider(Provider provider)
    {
        return provider.Icon;
    }
}
#endregion

标签: c#.netxmlstring

解决方案


我是在阅读 Jon Skeet 的评论时才发现的。我编码错了!

我需要查看查询是否包含提供程序 URL,而不是是否包含查询。

public static Provider FindContentProviderByName(Provider[] providers, string query)
    {
        return providers.SingleOrDefault(item => query.Contains(item.Name));
    }
    
    public static Provider FindContentProviderByURL(Provider[] providers, string query)
    {
        return providers.SingleOrDefault(item => query.Contains(item.URL));
    }

推荐阅读