c#中有一个Integer类吗?

Abh*_*hek 15 c# java

我们Integer在JAVA上有课,但我在C#中找不到任何等同的课程?c#有任何等价物吗?如果没有,我如何Integer在c#中获得JAVA 类行为?

我为什么需要这个?

这是因为我正在尝试将JAVA代码迁移到c#代码.如果存在等效方式,则代码迁移将更容易.对于插件,我需要存储的引用,Integer我不认为我可以创建int或参考Int32.

rec*_*ive 8

C#具有统一的类型系统,因此int可以隐式地装入object引用.IntegerJava中存在的唯一原因是它可以转换为对象引用并存储在引用中以用于其他容器类.

由于C#可以在没有其他类型的情况下执行此操作,因此没有相应的类Integer.

  • @StevePaul`int?`存储一个可以为空的整数而不需要装箱,这是标准用法. (2认同)
  • @ToolmakerSteve:我无法想象整数的引用类型包装器的任何实际用例.如何改变7号?它唯一的状态是它的身份.如果更改数字,则只是另一个数字,而不是具有不同属性的相同数字.数字应该是不可变的,就像字符串一样. (2认同)
  • @ToolmakerSteve:另外,问题是关于从Java进行移植的问题。Java确实有一个“整数”包装器,但是它是不可变的,意味着没有状态可以更改,因此即使有人确实找到了需要可变整数的方案,它也不能应用于这个问题。 (2认同)

Him*_*ere 5

如果不进行任何手动更改,对于任何类型的语言,代码迁移都不会立即可用。诸如此类之类的东西Integer根本就不存在(C#为何仍应如此,请参见递归答案),因此您必须自己做一些工作。最接近的等价于您所追求的是Int32或其别名int。但是,您当然可以编写自己的包装器类:

    public class Integer
    {
        public int Value { get; set; }


        public Integer() { }
        public Integer( int value ) { Value = value; }


        // Custom cast from "int":
        public static implicit operator Integer( Int32 x ) { return new Integer( x ); }

        // Custom cast to "int":
        public static implicit operator Int32( Integer x ) { return x.Value; }


        public override string ToString()
        {
            return string.Format( "Integer({0})", Value );
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • @PCLuddite-因为Int32 *不是引用类型*,所以它是一个结构。您不能“使用它存储对整数的引用”。“整数参考类”的工作方式如下:`Integer a.Value = 5; 整数b = a; b。值= 3; if(a.Value == 3)..` if测试返回`true`; 改变b的值也会改变a。 (3认同)