TheTalion
@TheTalion

Как правильно создать собственный тип данных возвращающий два значения в C#?

Возникла необходимость сделать собственный тип данных (для удобности), но годного описания по этой теме на C# не нашел.
Нужен тип, возвращающий двойное значение, написал что-то такое, но не уверен, что это будет правильно работать (потому что на других языках, где есть примеры создания собственных типов, выглядит все по другому).
public struct Point2D
	{
		 public static Tuple<int,int> Point2d( int x,  int y)
		{
			var tu = new Tuple<int, int>(x, y);
			return tu;
		} 
	}
  • Вопрос задан
  • 4797 просмотров
Решения вопроса 1
VoidVolker
@VoidVolker Куратор тега C#
Dark side eye. А у нас печеньки! А у вас?
public class MyType
{
    public int a = 0;
    public int b = 0;
    public MyType(int a = 0, int b = 0)
    {
        this.a = a;
        this.b = b;
    }
}


И далее использовать по своему усмотрению:
public static MyType Point2d(int x, int y)
{
    return new MyType(x, y);
}

public static MyType Point2d(int x, int y)
{
    MyType result = new MyType(x, y);
    return result;
}

public static MyType Point2d(int x, int y)
{
    MyType result = new MyType();
    result.a = x;
    result.b = y;
    return result;
}

public static MyType Point2d(int x, int y)
{
    MyType result = new MyType(x);
    result.b = y;
    return result;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Aquarius-Michael
@Aquarius-Michael
Программист и железячник
Приведённая запись - это кортеж, где можно вернуть несколько значений через возврат. Если хочется создать собственный тип. То, как обычно, создаём новый тип со структурой, пихаем туда свои поля данных. При необходимости можно их выравнивать в памяти. Для большей возможности придётся немного подождать, пока Microsoft не выкатят версию C# 7.0. Там возможностей побольше.
Ответ написан
Комментировать
@ilyasidor
вот пример нового типа с возможностью сложения с типом int(можешь добавить еще варианты действий по типу сложения или умножения)
struct MY_TYPE_DATA
    {
        private int integer_x;
        public static implicit operator MY_TYPE_DATA(int _x)
        {
            return new MY_TYPE_DATA { integer_x = _x };
        }
        public static explicit operator int(MY_TYPE_DATA count)
        {
            return count.integer_x;
        }
        public static int operator +(MY_TYPE_DATA x, int y)
        {
            return x.integer_x + y;
        }
        public static int operator +( int y,MY_TYPE_DATA x)
        {
            return y + x.integer_x;
        }
    }

пример реализации в программе
MY_TYPE_DATA c = 19;            
            int zxc = 10 + c;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы