如何在方法中调用结构体,以便之后可以输出它?

How do I call a struct in a method so I can output it afterwards?

提问人:marc77 提问时间:9/22/2023 最后编辑:Ken Whitemarc77 更新时间:9/22/2023 访问量:61

问:

我想让 x 和 y 整数输出 z,这是两个整数的乘积/和。 但是,要做到这一点,我必须以某种方式将 z 变量(在结构中找到)引入 Update() 方法,并且参数似乎不起作用,因为我必须在 struct 和 Main() 方法中引入它们。它将创建一个引入参数的无限循环。 我想尝试在 Update() 方法中创建一个实例,但我似乎无法理解它,并且在此过程中有些困惑。 作为参考,这是我的代码:

    using System;

    public class Program
    {
        public static void Main()
        {
            Console.WriteLine("Enter: ");
            string oper1 = Console.ReadLine().PadRight(2);
            string oper2 = Console.ReadLine().PadLeft(2);
            string oper3 = ("[+ , -, *, /] Enter an operator and press the Enter key.");
            string[] operators = {"+", "-", "*", "/" };

            vector3 v = new vector3(int.Parse(oper1), int.Parse(oper2), 0);

        
            Update(v, oper3, operators);
        }

        public static void Update(vector3 v, string oper3, string[] operators)
        {
        

            ConsoleKeyInfo keyInfo = Console.ReadKey();

            Console.WriteLine($"Enter operator: {operators}");
            string output = Console.ReadLine();

            //vector3 output2 = ();
        

            //bool containString = Z.Contains(operators);
      
            if (keyInfo.Key == ConsoleKey.Enter)
            {
                Console.WriteLine("hello");
            }
            else
            {
                Console.WriteLine($"\nEnter the operator as shown and press the Enter key.");
          
                Update(v, oper3, operators);
            }
      
            Console.WriteLine($"[myInt1: {v.myInt1}, myInt2: {v.myInt2}, Z: {v.Z}]");
        }

        public struct vector3
        {
            public int myInt1;
            public int myInt2;
            public int Z;

            public vector3(int x, int y, int z)
            {
                myInt1 = x;
                myInt2 = y;
                Z = z;

              string output = Z.ToString();

          
            }

        }
    }

我本来希望在 Update() 中创建一个实例,但它不想工作,我不知道为什么。

C# 数据结构 方法

评论

2赞 Joel Coehoorn 9/22/2023
fwiw,.Net 中已经包含一个 Vector3 结构体
0赞 harold 9/22/2023
System.Numerics.Vector3 具有浮点字段,因此它不能与此整数向量互换
1赞 Jonathan Dodds 9/22/2023
这是为了课堂作业吗?多态性是否被引入?
3赞 Stuart Smith 9/22/2023
请记住,结构是通过值传递的,而不是通过引用传递的。所以传入的第一个值将是传出的值,它不会改变。即使它在递归调用的更新函数中发生了变化。Update 需要返回向量才能完成此工作。
0赞 Fildor 9/22/2023
“在这个过程中有点困惑”——是的,所有这些听起来都很困惑。问题文本对我来说没有任何意义。你说的“调用结构”、“引入......”是什么意思?为什么“引入”某些东西会产生您所描述的效果?

答:

0赞 Emir Alper Yildiz 9/22/2023 #1

你到底想达到什么目的?

我想让 x 和 y 整数输出 z,这是两个整数的乘积/和。

如果 z 是您使用运算符输入和 myInt1 执行的计算结果,则 myInt2;那为什么没有计算呢?您只需将值分配给 myInt1、myInt2、z。

但是,要做到这一点,我必须以某种方式将 z 变量(在结构中找到)引入 Update() 方法,并且参数似乎不起作用,因为我必须在 struct 和 Main() 方法中引入它们。

另一点是,由于 z 位于向量结构内部,如果您将向量作为参数提供给 Update() 方法,那么 Update 方法也可以访问向量内部的变量。你应该记住斯图尔特·史密斯的评论。

我本来希望在 Update() 中创建一个实例,但它不想工作,我不知道为什么。

如果您已经为此问题提供了矢量参数,则不应创建矢量实例。但这并不意味着你不能。你可能会错过一些规则。也许你可以为此提出错误。

您可以再次检查参数是如何工作的。祝你好运。