Ответ 1
Или, если вам нужно установить значение найденного:
found = Value1.StartsWith("abc")
Изменить: учитывая ваше редактирование, я бы сделал что-то вроде:
found = Value1.Substring(0, 5).Contains("abc")
Я хочу проверить, содержит ли Value1
ниже "abc" в первых X-символах. Как вы можете проверить это с помощью инструкции if
?
var Value1 = "ddabcgghh";
if (Value1.Contains("abc"))
{
found = true;
}
Он может быть в пределах первых 3, 4 или 5 символов.
Или, если вам нужно установить значение найденного:
found = Value1.StartsWith("abc")
Изменить: учитывая ваше редактирование, я бы сделал что-то вроде:
found = Value1.Substring(0, 5).Contains("abc")
Я бы использовал одну из перегрузок метода IndexOf
bool found = Value1.IndexOf("abc", 0, 7) != -1;
более короткая версия:
found = Value1.StartsWith("abc");
Извините, но я сторонник кода "меньше".
Учитывая редактирование вопросника, я бы действительно пошел с чем-то, что приняло смещение, на самом деле это может быть отличным местом для метода расширения, который перегружает StartsWith
public static class StackOverflowExtensions
{
public static bool StartsWith(this String val, string findString, int count)
{
return val.Substring(0, count).Contains(findString);
}
}
if (Value1.StartsWith("abc")) { found = true; }
Использовать IndexOf проще и высокой производительности.
int index = Value1.IndexOf("abc");
bool found = index >= 0 && index < x;
Вы близко... но используйте:
if (Value1.StartsWith("abc"))
Это то, что вам нужно:
if (Value1.StartsWith("abc"))
{
found = true;
}
Более явная версия
found = Value1.StartsWith("abc", StringComparison.Ordinal);
Лучше всегда указывать конкретное сравнение, которое вы делаете. Класс String может несколько не соответствовать типу используемых сравнений.
Вы также можете использовать регулярные выражения (менее читаемые)
string regex = "^.{0,7}abc";
System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(regex);
string Value1 = "sssddabcgghh";
Console.WriteLine(reg.Match(Value1).Success);
Добавление из ответа ниже я создал этот метод:
public static bool ContainsInvalidStrings(IList<string> invalidStrings,string stringToCheck)
{
foreach (string invalidString in invalidStrings)
{
var index = stringToCheck.IndexOf(invalidString, StringComparison.InvariantCultureIgnoreCase);
if (index != -1)
{
return true;
}
}
return false;
}
его можно использовать следующим образом:
var unsupportedTypes = new List<string>()
{
"POINT Empty",
"MULTIPOINT",
"MULTILINESTRING",
"MULTIPOLYGON",
"GEOMETRYCOLLECTION",
"CIRCULARSTRING",
"COMPOUNDCURVE",
"CURVEPOLYGON",
"MULTICURVE",
"TRIANGLE",
"TIN",
"POLYHEDRALSURFACE"
};
bool hasInvalidValues = ContainsInvalidStrings(unsupportedTypes,possibleWKT);
вы можете проверить несколько недопустимых значений таким образом.