由于Vs2005已经支持INT和DataTime类型为空,但我在重写代码生成器时,想在生成的CS文件中无法加入类似
int? i = null; 这样的语句,在MSDN苦查无果,特在此请教.

解决方案 »

  1.   

    没见过int? i = null这样的语法,2.0里的新语法吗
      

  2.   

    NET 2.0 里的INT DataTime等类型已经支持赋值为null
    具体语法为
    int? i = null;
    DataTime? dt = null;
      

  3.   

    int i = null;
    为什么要加?
      

  4.   

    楼上,不加?就无法赋null对CodeDom不熟悉
    不过楼主可以尝试生成这样的代码:Nullable<int> i = null;
      

  5.   

    Nullable<int> i = null;
    是等效于
    int? i = null;
    但就是不知道如何自动生成呀。
      

  6.   

    CodeFunction FindFunction(CodeClass _codeClass,string _functionName,object _returnType,vsCMAccess _access,string[] _params,bool _addOverride)
    {
    foreach(CodeElement element in _codeClass.Members)
    {
    switch (element.Kind)
    {
    case vsCMElement.vsCMElementFunction:
    if (element.Name == _functionName)
    {
    return (CodeFunction)element;
    }
    break;
    }
    } //没找到则新建一个
    CodeFunction codeFucntion = _codeClass.AddFunction(_functionName,vsCMFunction.vsCMFunctionFunction ,_returnType,0,_access,0);
    if (_params != null)
    {
    int i;
    for (i = 0 ; i < _params.GetLength(0) / 2; ++i)
    {
    codeFucntion.AddParameter(_params[i * 2],_params[i * 2 + 1],i);
    }
    } if (_addOverride)
    {
    EditPoint ep = codeFucntion.StartPoint.CreateEditPoint();
    string s = ep.GetText(ep.Line);
    string ss = s.Trim();
    int n = s.IndexOf(" ",s.IndexOf(ss.Substring(0,1)));
    if (n > 0)
    {
    ep.MoveToLineAndOffset(ep.Line,3 + n);
    ep.Insert(" override ");
    }
    }
    return codeFucntion; } //添加BeforeInquire方法
    cf = FindFunction(_codeClass,"BeforeInquire",vsCMTypeRef.vsCMTypeRefBool,vsCMAccess.vsCMAccessProtected,null);
    ep = cf.EndPoint.CreateEditPoint();
    ep.MoveToLineAndOffset(ep.Line - 1,1);
    ep.Insert( AutoCodeCSharp.TabStr(3) + "// 在下面进行数据查询前的附加判断或者处理,返回false则放弃操作。可以在这里进行自定义查询或者使用AddCondition方法增加查询条件。\r\n\r\n");
                                         ep.Insert("int? i = null;");//这样不可以?
      

  7.   

    自动生成CS文件,生成的CS文件里需要有int? i = null;这样的一行。