class LogEntity
    {
        private string _all;
        private string _cs_username; //用户名
        private string date;
        private string time;
        private string c_ip;            //客户IP
        private string s_sitename;      //服务名
        private string s_computername;  //服务器名
        private string s_ip;            //服务器IP
        private string s_port;          //服务器端口
        private string cs_method;       //方法
        private string cs_uri_stem;     //URI 资源
        private string cs_uri_query;    //URI 查询
        private string sc_status;       //协议状态
        private string sc_substatus;    //子协议状态
        private string sc_win32_status; //Win32 状态
        private string sc_bytes;        //发送字节
        private string cs_bytes;        //接受的字节数
        private string time_taken;      //所用时间
        private string cs_vsersion;     //协议版本
        private string cs_host;         //主机
        private string user_agent;      //用户代理
        private string cookie;          //cookie
        private string referer; 
     }我想要实现这样的效果:在new的时候个给上面这些赋值,传入参数个数不定,比如new LogEntity(date,user_agent)则对date,和user_agent赋值,其他的都是空字符串。没碰到过这样的情况,各位帮忙出出主意哈~先谢大家

解决方案 »

  1.   

    不知下面这种方式行不行:
    public LogEntity(params string[] strArray)
    {
    if (null == strArray || strArray.Length <= 0) return;
    _all = strArray[0] == null ? string.Empty : strArray[0];
    _cs_username = 
    (strArray.Length < 1 || strArray[1] == null) ? string.Empty : strArray[1];
    date = 
    (strArray.Length < 2 || strArray[2] == null) ? string.Empty : strArray[2];
    }
      

  2.   

    刷了一下。
    楼上正确params关键字。详见MSDN另外,如果vs2010,则可以用新特性:
    默认参数命名参数
    详见OJ版主的帖子
      

  3.   

     class LogEntity
        {
            private string _all;
            private string _cs_username; //用户名
            private string date;
            private string time;
            private string c_ip;            //客户IP
            private string s_sitename;      //服务名
            private string s_computername;  //服务器名
            private string s_ip;            //服务器IP
            private string s_port;          //服务器端口
            private string cs_method;       //方法
            private string cs_uri_stem;     //URI 资源
            private string cs_uri_query;    //URI 查询
            private string sc_status;       //协议状态
            private string sc_substatus;    //子协议状态
            private string sc_win32_status; //Win32 状态
            private string sc_bytes;        //发送字节
            private string cs_bytes;        //接受的字节数
            private string time_taken;      //所用时间
            private string cs_vsersion;     //协议版本
            private string cs_host;         //主机
            private string user_agent;      //用户代理
            private string cookie;          //cookie
            private string referer; 
           //后面的属性直接写 我直接写构造函数
    比如所有的参数是4个 cs_vsersion,cs_host,user_agent,cookie
            public LogEntity(string cs_vsersion,string cs_host,string user_agent,string cookie)
    {
       if(!string.isnullorempty(cs_vsersion))
         this.cs_vsersion=cs_vsersion;
        if(!string.isnullorempty(cs_host))
         this.cs_host=cs_host;
        if(!string.isnullorempty(user_agent))
         this.user_agent=user_agent;
         if(!string.isnullorempty(cookie))
         this.cookie=cookie;
    }
    }
    //这样在调用的时候 不传的参数只需要填""就OK了。
      

  4.   

     public class Mgs
        {
            public string userName
            { get; set; }
           
            public string toUser
            { get; set; }
                 .............
         }Mgs m=new Mgs(){"参数"};
    这样可以
      

  5.   


    public class Mgs
      {
      public string userName
      { get; set; }
        
      public string toUser
      { get; set; }
      .............
      }单独写成一个类 不要构造函数
    Mgs m=new Mgs(){"参数"};
    就可以不定输入参数个数
      

  6.   

    可以传入一个String[]进来 
    然后依据string【】。count 依次赋值
      

  7.   

    就写一个构造,形参都给默认的空,然后想赋值哪个就随意赋值咯://Instance1:
    public LogEntity(string _all = string.empty, string _cs_username = string.empty, ....)
    {
      this._all = all;
      this._cs_username = _cs_username;
      .........
    }
    另外一种就是楼上诸位说的传个String或者String[],如果是string自己分隔字符,string[]则方便些,不用的你给string[n] = string.empty就可以了.只是这种方法要保证参数的顺序.//Instance2:
    public LogEntity(string[] agruArray)
    {
      _all = agruArray[0];
      ....
    }
      

  8.   

    个人认为,不要传字段参数,直接传类对像作为参数,如publi fun(LogEntity le)
      

  9.   

    先谢谢大家~
    参数是可以传进去了,但是我传的参数和类的字段顺序没关系,而且数量也可能会少几个。
    问题是解决了,可是感觉有点傻,那个构造函数又同时传了个数组,fieldspublic LogEntity(string[] fields,params string[] strArray)fields是 string[] strArray 对应的名称,我是这样确认strArray[] 对应的是那个字段。
      

  10.   

    恩,lz的方法虽然感觉有点笨拙,但实际上还是比较可行的。
    虽然也可以用结构,但是结构一般用于定值的场合,而且程序改动也可能会很大。
    所以个人感觉lz的fields传的很好。没有必要改动。
      

  11.   

    //Instance1:
    public LogEntity(string _all = string.empty, string _cs_username = string.empty, ....)
    {
      this._all = all;
      this._cs_username = _cs_username;
      .........
    }
      

  12.   

    多重载几个构造函数就行了。
    public LogEntity(string cs_vsersion,string cs_host,string user_agent,string cookie)
    {
    ......
    }
    public LogEntity(string cs_vsersion,string user_agent, string cookie)
    {
    ......
    }
    public LogEntity(string cs_vsersion,string cookie)
    {
    ......
    }