如何实现Int32的模拟?

时间:2019-01-11 10:38:13

标签: c# struct const

这个问题已经被严厉地问过了。

基本上是:如何通过C#中的常量初始化结构?

答案是-在c#中是不可能的。

但是...我会写

SELECT CEILING((AVG(CAST (Salary AS DECIMAL (10,2))))-(AVG(CAST (Salary AS DECIMAL (10,2))))) FROM EMPLOYEES

如果我检查Int32的来源,则将其定义为结构。 我可以轻松地为Int32重复一个代码,并为它命名,例如TModelItem。 我只想写:

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;
    }
}

但是我无法正常工作。 是的,TModelItem重复Int32,并且代码甚至都没有编译。

我如何使其工作? 要么 什么可以用来满足我的需求?我需要int或long int或string作为基础。

1 个答案:

答案 0 :(得分:0)

就像已经提到的评论一样,这是不可能的。

我不知道这是否满足您的需求。但是您可以执行以下操作:

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;
    }
}