Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何实现Int32的模拟?_C#_Struct_Constants - Fatal编程技术网

C# 如何实现Int32的模拟?

C# 如何实现Int32的模拟?,c#,struct,constants,C#,Struct,Constants,这个问题在severel变体中已经被提出了 基本上是:如何用C中的常数初始化一个结构 答案是-这在c中是不可能的 但是。。。我会写 public class TModel2 { public const Int32 R32 = 32; public const Int32 R33 = 33; } [TestMethod] public void TestMethod1() { Int32 currentModel = TModel2.R33; switch (c

这个问题在severel变体中已经被提出了

基本上是:如何用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作为基础。

就像前面提到的注释一样,这是不可能的

我不知道这是否满足你的需要。但你能做的是这样的:

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;
    }
}
我如何让它工作?调整编译器。。。答案仍然是一样的:这是不可能的。32不是编译时常量TModelItem值。请参阅。
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;
    }
}