Необходимо чтобы при инициализации объекта (т.е. вызове конструктора) метод проверял сумму этих переменных и либо по новой запрашивал значения либо прерывал с ошибкой.
Зачем?
Если нужно сделать всё в едином классе, то достаточно написать статический метод и в нём проверять, после чего уже создавать объект. Бросать исключения в конструкторе — плохая идея. Бросать исключения в принципе — идея неплохая, но они все должны быть уловлены блоками try-catch, с записью в лог или ещё куда.
Если стоит задача написать консольное приложение, который бы инициализировало класс с правильными значениями, то оно может выглядеть, к примеру, так:
using System;
using System.Collections.Generic;
using System.Linq;
namespace Toster.Q561594 {
public static class Extentions {
public static string Join<T>( this IEnumerable<T> list, string separator = "," )
=> string.Join( separator, list );
public static int[] ConvertConsoleInput( this string input, params char[] separators )
=> input.Split( separators, StringSplitOptions.RemoveEmptyEntries )
.Select( int.Parse )
.ToArray();
}
public class Triangle {
public readonly int A;
public readonly int B;
public readonly int Y;
public Triangle(int a, int b, int y) {
A = a; B = b; Y = y;
}
public static bool IsValidAngles( int a, int b, int y )
=> a > 0 && b > 0 && y > 0 && ( a + b + y ) == 180;
public override string ToString()
=> $"( {nameof( A )}: {A}, {nameof( B )}: {B}, {nameof( Y )}: {Y} )";
}
class Program {
static void Main( string[] args ) {
int[] temp;
while ( true ) {
Console.Write( "Enter three valid space separated angles and press Enter: " );
try {
temp = Console.ReadLine().ConvertConsoleInput( ' ' );
if ( temp.Length != 3 )
throw new IndexOutOfRangeException($"Incorrect number of angles: {temp.Length}");
if ( Triangle.IsValidAngles( temp[0], temp[1], temp[2] ) )
break;
else
throw new InvalidOperationException( $"Incorrect angles: ( {temp.Join( ", " )} )" );
} catch ( Exception ex ) {
Console.WriteLine( "Error. " + ex.Message + Environment.NewLine );
}
}
var triangle = new Triangle( temp[0], temp[1], temp[2] );
Console.WriteLine( $"Valid triangle object was created: {triangle.ToString()}" );
Console.ReadLine();
}
}
}
При работе в консоли это будет выглядеть как-то так:
Enter three valid space separated angles and press Enter: i'm typing
Error. Input string was not in a correct format.
Enter three valid space separated angles and press Enter: 1 2 3
Error. Incorrect angles: ( 1, 2, 3 )
Enter three valid space separated angles and press Enter: 100 10000
Error. Incorrect number of angles: 2
Enter three valid space separated angles and press Enter: 5 100 75
Valid triangle object was created: ( A: 5, B: 100, Y: 75 )
Обрати внимание на статический класс Extentions, статические методы которого имеют у первого аргумента this. Это методы расширений, они позволяют расширять уже имеющиеся классы, как если бы у них существовали эти методы. StringSplitOptions.RemoveEmptyEntries в ConvertConsoleInput отбрасывает получившиеся пустые строки, поэтому вводить можно хоть «__4____152______24___», оно это превратит сначала в string[] { "4", "152", "24" }, а потом распарсит и выдаст int[] { 4, 152, 24 };