var str = "14 - 15";
var operationPosition = str.IndexOf('-');
if (operationPosition >= 0)
{
var aStr = str.Substring(0, operationPosition).Trim(); // подстрока до минуса
var bStr = str.Substring(operationPosition+1).Trim(); // подстрока от минуса и до конца
int a, b;
if (int.TryParse(aStr, out a) && int.TryParse(bStr, out b))
{
var result = a - b;
Console.WriteLine($"{a} - {b} = {result}");
}
else Console.WriteLine("Требуются числа в выражении!");
}
else Console.WriteLine("Требуется выражение в формате N - M, где N и M числа!");
var str = "14 - 15";
var parts = str.Split('-').Select(p => p.Trim());
if (parts.Count() == 2)
{
// дальше использовать int.TryParse, но вместо aStr и bStr использовать parts[0] и parts[1]
}
Год я работал с Битриксом, используя там всевозможные инструменты web разработчика, такие как: php, js, jquery, ajax, ну и по верстке html5 css3.
<DataTemplate DataType="{x:Type viewModels:Item}">
(без x:Key и с указанием x:Type в DataType), либо использовать ItemTemplateSelector - это класс, который выберет шаблон по самому объекту элемента, мощный инструмент, например, если тип элемента одинаковый, а шаблон разный.public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
var itemData = item as SelectItem;
if (itemData != null)
{
if (itemData.MyMode == 0)
{
return (DataTemplate)((FrameworkElement)container).FindResource("ContentContext");
}
if (itemData.MyMode == 1)
{
return (DataTemplate)((FrameworkElement)container).FindResource("SelectContext");
}
}
return null;
}
<ListBox>
, в ресурсах <UserControl>
или вообще ещё где-нибудь. <ListBox ItemsSource="{Binding Items}"/>
и без лишних вещей. А нужный шаблон подключается через <DataTemplate DataType="{x:Type viewModels:Item}">
.class SeparatorItem
{
public Brush Color { get; }
}
class SelectItem
{
public string DisplayText { get; }
public int SelectedVariant { get; }
// ...
}
class ContentItem
{
public string Text { get; }
// ...
}
public class ItemsList
{
public ObservableCollection<object> Items { get; } = new ObservableCollection<object>
{
new SeparatorItem { Color = Brushes.Red },
new SelectItem { DisplayText = "№ 1" },
new SelectItem { DisplayText = "№ 2" },
new SelectItem { DisplayText = "№ 3" },
new SelectItem { DisplayText = "№ 4" },
new Separator { Color = Brushes.Blue },
new ContentItem { Text = "что-то там" },
};
}
<UserControl ...>
<UserControl.Resources>
<converters:IntToBoolConverter x:Key="IntToBoolConverter"/>
<DataTemplate DataType="{x:Type viewModels:SeparatorItem}">
<Separator Foreground={Binding Color} Padding="0" Margin="0"/>
</DataTemplate>
<DataTemplate DataType="{x:Type viewModels:SelectItem}">
... {Binding DisplayText} ...
</DataTemplate>
<DataTemplate DataType="{x:Type viewModels:ContentItem}">
... {Binding Text} ...
</DataTemplate>
</UserControl.Resources>
<Grid>
<ListBox ItemsSource="{Binding Items}"/>
</Grid>
</UserControl>
<TextBlock Text="{Binding MyString}"/>
Студия приостанавливает работу кода во время возникновения исключения. Если нажать F5, то код пойдёт к catch-у.
Решение - как вы и сказали в ответе.