将变量从Main函数传递到另一个C#类

时间:2012-01-03 07:50:59

标签: c# main

我用这个严厉地撞在墙上。我在C#控制台应用程序中有几个变量,我想重复使用它。但是,我不能为我的生活重新使用另一个类中的变量。我会喜欢你能提供的任何帮助或指示 - 我已经搜索了很长时间而且我完全被难倒了。

编辑:是的,变量在我的Main函数中。很抱歉把它留下来。

编辑:下面严重修改了代码。我想在另一个类中重用的变量值位于中间。还有更多,但这3个应该足以用于样本。谢谢你的帮助!!!

public static class MyApp
    {
        static void Main(string[] args)
        {
            // loads XML doc
            foreach (XmlNode node in nodes)
            {
            try
                {
                    // does a bunch of stuff

                    // Parses variables from REST API

                    XDocument docdetailxml = XDocument.Parse(xmldoc);

                    XNamespace ns = docdetailxml.Root.GetDefaultNamespace();

                    var buid = docdetailxml.Root.Element(ns + "busid").Value;
                    var bname = docdetailxml.Root.Element(ns + "busname").Value;
                    var bcount = docdetailxml.Root.Element(ns + "buscount").Value;

                    // Invoke SQL connection string

                    // Trigger Stored Procedure and write values to database

                    // If needed, trigger email notification

                    // Close connections
                }
                catch (Exception e)
                {

                    Console.WriteLine("Error encountered: " + e.Message);

                    // Exit the application
                    System.Environment.Exit(1);

                }
                finally
                {
                    // Exit the application
                    // System.Environment.Exit(0);
                }

            }

        }

        private static void GetConnectionString()
        {
            throw new NotImplementedException();
        }

        private static void GetConnectionStrings()
        {
            throw new NotImplementedException();
        }
    }
}

4 个答案:

答案 0 :(得分:2)

如果变量表示某个对象的某些信息(如name,id等),那么它们应该封装在class中。应该使用类的实例(称为object)来访问此信息。

由于您已经拥有表示对象的变量,因此下一步是将这些变量分组到类中。这些变量在类中表示为properties。对这些成员执行的操作应该以methods的形式提供。此外,access modifiers决定了成员的可见性。

通过您的示例,我可以识别出代表客户的3个变量(假设,我不确定确切的用例)。这些将构成Customer类。

class Customer
{
    // You can either pass the UID through the constructor or 
    // expose a public setter to allow modification of the property
    public Customer(string uid)
    {
        this.UID = uid;
    }

    public string UID { get; private set; }
    public string Name { get; set; }
    public string Count { get; set; }
}

此外,foreach循环可以拆分为2个部分以实现可恢复性

  1. 从xml节点读取并创建list个客户
  2. 在客户列表上执行数据库操作(如触发存储过程,写入值等)
  3. 此外,您可以创建另一个类来执行您在控制台应用程序中执行的操作(业务逻辑)。这将允许您重复使用相同的逻辑,以防您将其移动到另一个应用程序(如winforms或Web服务)。

    更多信息

答案 1 :(得分:2)

你应该定义公共财产或公共领域

public class Student
{
public string Name {get;set;}
}

如果要传递值,可以将此值指定给属性

Student st = new Student(); 
st.Name = "your value";

或者您也可以使用类构造函数。

答案 2 :(得分:1)

我认为这个网站上有专门的struts论坛,最好看看那里有更多信息。

快速回答:将值从一个操作传递到另一个操作的主要方法(我认为您正在使用struts Action类?)是将值放入请求或会话中(因此,第一个工作就是读取关于这些主题:HttpServletRequest和HttpSession)。 Struts动作类在execute()方法中完成它们的工作,该方法的参数类型为HttpServletRequest。从请求中,您可以获得会话句柄。

请求和会话提供方法getAttribute()和setAttribute()。因此,要将数据从一个操作传递到另一个操作,请将该数据设置为(请求或会话)属性,然后再次在下一个操作中读取该属性。

答案 3 :(得分:-1)

Program类可能是Static,因此您必须按类名而不是实例访问这些字段。

class Program
{
    public string Name = "a name";

    static void Main(string[] args)
    {
        Name = "Hello"; //You can't do this, compile error
        Program p = new Program();
        p.Name = "Hi"; //You can do this

        SecondName = "Sn"; //You can do this
        Program.SecondName = "Tr"; //You can do this too
    }
    public static string SecondName = "Peat";
}