// 问题如下
// 先定义如下一个结构体
struct stuSTU
{
   public int id;
   public string name;
   pulic stuSTU(int param_id, string param_name)
   {
      this.cid = param_id;
      this.name = param_name;    
   }
}// 现在定义一个方法如下
public stuSTU Register(int id, string name)
{
   if(null == name)
   {
      // 在这里我想返回一个类似对象空引用的东西,但结构体是值类型,没有空的说法,该如何表达空的意思呢
      return [uncertain];
   }
   else
   {
      return (new stuSTU(id,name));
   }
} 谢谢!

解决方案 »

  1.   

    两种解决方法:
    1) 不使用结构体,使用class。2) 使用Nullable类型(.NET 2.0新增类型)public   Nullable<stuSTU>   Register(int   id,   string   name) 

          //if(null == name) 
          if(string.IsNullOrEmpty(name)) 
          { 
                return   null; 
          } 
          else 
          { 
               return   (new   stuSTU(id,name)); 
          } 
    }
      

  2.   

    return null; // 错误111 无法将 NULL 转换成“stuMEMBERINFO”,因为它是一种值类型return 0; // 错误111 无法将类型“int”隐式转换为“stuMEMBERINFO”
      

  3.   

    借此机会,想发起个讨论: C#中,struct 和 class的使用时机各是什么?
      

  4.   

    回六楼,EFFECTIVE C#上写,好像STRUCT内存访问比CLASS快那么一点点
      

  5.   

    强烈建议使用classNullable也可,这东西是个模版
      

  6.   

    你这样的应用,应该使用对象(Class),面向对象的编程思想,基本所有都是对象。极少使用Struct。
      

  7.   

    有一种用法叫可空的值类型,也许能解决LZ的问题,
    //   现在定义一个方法如下 
    public stuSTU? Register(int id, string name)
    {
    if(null   ==   name) 
          { 
                //   在这里我想返回一个类似对象空引用的东西,但结构体是值类型,没有空的说法,该如何表达空的意思呢 
                return   null;
          } 
          else 
          { 
                return   (new   stuSTU(id,name)); 
          } }
    注意函数的返回的定义是“stuSTU?”,而不是“stuSTU”,
    如 stuSTU? tt;
    则 tt.value是stuSTU类型的东东,此时tt可以为null。
      

  8.   

    Nullable解决了我的问题。谢谢大家。
    但我还有两个疑问:1、Nullable只是用来解决该类问题的吗?还是有更深层或者广泛的作用?2、我对模板,或更确切一些泛型的概念还是不是很清楚。
      

  9.   

    可不可以这样,使用default关键字...
    return defautl(你的结构体);
      

  10.   

    default关键字可行。default 关键字,此关键字对于引用类型会返回空,对于数值类型会返回零。对于结构,此关键字将返回初始化为零或空的每个结构成员,具体取决于这些结构是值类型还是引用类型。但要判断结构体是否无效,就还是需要判断每个字段的值。
    如例程中的stuSTU结构,就需要判断:
    if(stuSTU.id == 0 && stuSTU.name == null)
    {
       //...
    }结构的成员字段少还好,如果一个结构有很多字段,那岂不是很麻烦?
      

  11.   

    return   (new   stuSTU(-1,-1)); 
    我觉得用个-1或0表示说明没有意义,就相当于是为空了,你方法是stuSTU的值类型,所以要返回一个stuSTU。
    结构体是值类型,分配在线程栈上的。类是引用类型,对象分配在栈上,实例分配在堆上。
      

  12.   

    ==16楼所述================================================================================
    return       (new       stuSTU(-1,-1));   
    我觉得用个-1或0表示说明没有意义,就相当于是为空了,你方法是stuSTU的值类型,所以要返回一个stuSTU。 
    结构体是值类型,分配在线程栈上的。类是引用类型,对象分配在栈上,实例分配在堆上。 
    ==========================================================================================1、我没理解 “你方法是stuSTU的值类型,所以要返回一个stuSTU”的意思。2、“类是引用类型,对象分配在栈上,实例分配在堆上。”
    我想确认一下,这句话中的“对象”是否是“对象引用”的简化说法。谢谢支持!
      

  13.   

    1:public object ex1(){return null;} 
    这个方法的返回类型是object ,所以return的就必须是object类型这里也一样
    public   stuSTU   Register(int   id,   string   name) {return val;}
    你的方法是自定义类型 stuSTU,所以你return的就必须是stuSTU类型。又因为stuSTU是一个结构体类型,不能返回null,0这样的类型,
    所以就return(new stuSTU(-1,-1)); 2:是的