【问题标题】:return expected value when called by variable name被变量名调用时返回期望值
【发布时间】:2019-10-03 21:16:10
【问题描述】:

我想做一个结构体,当它的值被设置时,你可以通过变量名来调用值。

struct A
{
   int Value;
}

Main()
{
   // Sets Value to 9
   A Number = 9;
   Console.Write(Number);
   // output should be 9
}

我希望输出为 9

【问题讨论】:

    标签: c# struct


    【解决方案1】:

    您的结构缺少 Value 的访问器

        struct A
        {
            public int Value { get; set; }
        }
        Main()
        {
            A number = new A();
            number.Value = 9;
            Console.WriteLine(number.Value)
        }
    

    【讨论】:

    • 您的代码有效,但您的解释不正确:结构体可以同时包含字段和属性,并且 字段没有访问器(或者使用它,它们将是属性)。
    【解决方案2】:

    你可以像这样优化你的代码:

        struct A
        {
            public int Value;
    
            public A(int val)
            {
                Value = val;
            }
    
            public override string ToString()
            {
                return Value.ToString();
            }
        }
    

    按你的意愿使用:

            // Sets Value to 9
            A Number = new A(9);
            Console.Write(Number);
    

    【讨论】:

      【解决方案3】:

      要准确使用您编写的A number = 9; Console.Write(Number);,您首先需要定义一个隐式赋值运算符,然后您需要覆盖ToString() 方法以获得正确的输出。示例代码:

      struct A
      {
          public int Value;
      
          public A(int value)
          {
              Value = value;
          }
      
          // This allows creating an instance of struct A by writing it as an assignment statement
          static public implicit operator A(int value)
          {
              return new A(value);
          }
      
          public override string ToString()
          {
              return Value.ToString();
          }
      }
      
      public static void Main()
      {
          A Number = 9;
          Console.Write(Number);
      }
      

      现场演示:https://dotnetfiddle.net/WZPsLX

      【讨论】:

        【解决方案4】:

        除了 Peter B 的回答之外,您还可以定义相反的隐式转换,而不是 ToString()

        public static implicit operator int(A a)
        {
            return a.Value;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多