Как реализовать аналог Int32? - PullRequest
0 голосов
/ 11 января 2019

Этот вопрос уже задавался в нескольких вариациях.

В основном это так: Как инициализировать структуру константой в C #?

Ответ - это невозможно в c #.

Но ... я могу написать

public class TModel2
{
    public const Int32 R32 = 32;
    public const Int32 R33 = 33;
}

[TestMethod]
public void TestMethod1()
{
    Int32 currentModel = TModel2.R33;
    switch (currentModel)
    {
        case TModel2.R32:
           break;
        case TModel2.R33:
           break;
    }
}

если я проверяю источник Int32, он определяется как структура. Я могу легко повторить код для Int32 и назвать его, например, TModelItem. Все, что я хочу, это написать:

public class TModel1
{
    public const TModelItem R32 = 32;
    public const TModelItem R33 = 33;
}

[TestMethod]
public void TestMethod2()
{
    TModelItem currentModel = TModel1.R33;
    switch (currentModel)
    {
        case TModel1.R32:
            break;
        case TModel1.R33:
            break;
    }
}

Но я не могу заставить это работать. Да, TModelItem повторяет Int32 и код даже не компилируется.

Как мне заставить это работать? Или же Что можно использовать для покрытия моих потребностей? Мне нужно int или long int или string в качестве основы.

1 Ответ

0 голосов
/ 11 января 2019

Как и в уже упоминавшихся комментариях, это невозможно.

Я не знаю, удовлетворяет ли это вашим потребностям. Но вы можете сделать что-то вроде этого:

public readonly struct TModelItem
{
    public int Integer { get; }

    public TModelItem(int integer)
    {
        Integer = integer;
    }

    public static implicit operator TModelItem(int integer)
    {
        return new TModelItem(integer);
    }

    public static implicit operator int(TModelItem tModelItem)
    {
        return tModelItem.Integer;
    }
}
public class TModel1
{
    public static readonly TModelItem R32 = 32;
    public static readonly TModelItem R33 = 33;
}
[TestMethod]
public void TestMethod2()
{
    TModelItem currentModel = TModel1.R33;
    switch (currentModel)
    {
        case 32:
            break;
        case 33:
            break;
    }
}
...