array.prototype.find('name', 'name')
устарела и часто не очень эффективна. Вы можете попробовать что-то вроде let role = guild.roles.find(r => r.name === 'rolename')
, а затем использовать переменную, которую вы можете сказать id: role.id
, если бы вы предоставили действительную роль.
Как я могу проверить, что данная строка XPath допустима в C#/.NET?
Вы пытаетесь создать XPathExpression
от него и выгода исключение.
try
{
XPathExpression.Compile(xPathString);
}
catch (XPathException ex)
{
MessageBox.Show("XPath syntax error: " + ex.Message);
}
Ответ очень близко к тому, что записал Tomalak (зафиксированная ошибка компиляции, и поместите обязательное тело в XML):
public static class XPathValidator
{
/// <summary>
/// Throws an XPathException if <paramref name="xpath"/> is not a valid XPath
/// </summary>
public static void Validate(string xpath)
{
using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes("<xml></xml>")))
{
XPathDocument doc = new XPathDocument(stream);
XPathNavigator nav = doc.CreateNavigator();
nav.Compile(xpath);
}
}
}
Используйте 'умеренное' регулярное выражение для отфильтровывания полного мусора. Если это передает regex, просто выполните запрос и поймайте исключения, как упомянутый выше...