You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

波斯日期转公历C#代码报错求助:PersianCalendar相关错误排查

修复波斯日期转公历日期的C#编译错误

逐个错误修复说明

1. CS0128:变量名重复

代码中先后定义了PersianCalendar a和DateTime a,同一作用域内变量名冲突。将PersianCalendar实例的变量名改为pc,DateTime变量名改为visitDateTime即可解决。

2. CS0103:未定义PC变量

代码中调用PC.ToDateTime,但并未声明PC变量。应该使用刚才创建的PersianCalendar实例pc来调用ToDateTime方法。

3. CS0029:类型转换错误

因变量名重复导致DateTime变量被错误关联到PersianCalendar类型,修复变量名后该错误自动消失。

4. CS7036:参数不匹配

原代码中若a是PersianCalendar实例,调用AddMinutes会触发Calendar.AddMinutes(DateTime, int)方法(需要两个参数),但我们需要的是DateTime.AddMinutes(double)方法。修复变量名后,visitDateTime是DateTime类型,直接调用AddMinutes(Duration)即可,DateTime.AddMinutes支持传入double类型参数。

额外潜在问题修复

  • pid != ""的判断存在空引用风险,应改为!string.IsNullOrEmpty(pid)。
  • 自定义扩展类PersianToEnglish中,直接遍历字符串并Replace会因string不可变导致效率低下,改用StringBuilder优化。

修复后的完整代码

业务代码

public ActionResult addvisit(int docid, int visitid, string visitdatetime, string pid)
{
    int intpid = 0;

    if (!string.IsNullOrEmpty(pid))
    {
        var p = context.Table_Patient.Where(x => x.NationalCode == pid).SingleOrDefault();
        if (p == null)
        {
            return Json(new { status = 2, nv = 0 }, JsonRequestBehavior.AllowGet);  //no NationalCode
        }
        else
        {
            intpid = p.pkID;
        }
    }

    string[] vdatetime = visitdatetime.Split(' ');
    string[] vdate = vdatetime[0].Split('/');
    string[] vtime = vdatetime[1].Split(':');

    int y = MyExtensions.PersianToEnglish(vdate[0]);
    int m = MyExtensions.PersianToEnglish(vdate[1]);
    int d = MyExtensions.PersianToEnglish(vdate[2]);
    int h = MyExtensions.PersianToEnglish(vtime[0]);
    int min = MyExtensions.PersianToEnglish(vtime[1]);

    // 修复变量名冲突,改为pc
    PersianCalendar pc = new PersianCalendar();
    // 使用pc实例调用ToDateTime,变量名改为visitDateTime
    DateTime visitDateTime = pc.ToDateTime(y, m, d, h, min, 0, 0);

    Double Duration = context.View_PerDoctorsID.Where(x => x.fkDocID == docid && x.fkVisitID == visitid).Select(x => x.Duration).Single();

    Table_Visit nv = new Table_Visit();

    nv.fkDocID = docid;
    nv.SDate = visitDateTime;
    // DateTime.AddMinutes接受double参数,直接传入Duration即可
    nv.EDate = visitDateTime.AddMinutes(Duration);
    if (string.IsNullOrEmpty(pid))
    {
        nv.fkPID = null;
    }
    else
    {
        nv.fkPID = intpid;
    }
    nv.fkVisitStatus = 1;
    nv.fkVTID = visitid;
    var thisvisit = context.View_Visit.Where(x => x.fkDocID == docid && x.fkVTID == visitid && x.SDate == nv.SDate && x.EDate == nv.EDate).SingleOrDefault();
    
    // 此处可添加后续逻辑,比如判断thisvisit是否存在,保存到数据库等
    // 示例:
    // if(thisvisit == null)
    // {
    //     context.Table_Visit.Add(nv);
    //     context.SaveChanges();
    //     return Json(new { status = 1, nv = nv.pkID }, JsonRequestBehavior.AllowGet);
    // }
    // else
    // {
    //     return Json(new { status = 3, nv = 0 }, JsonRequestBehavior.AllowGet); // 已存在
    // }
}

优化后的自定义扩展类

public static class MyExtensions
{
    public static int PersianToEnglish(this string persianStr)
    {
        if (string.IsNullOrEmpty(persianStr))
            throw new ArgumentNullException(nameof(persianStr));
            
        Dictionary<char, char> LettersDictionary = new Dictionary<char, char>
        {
            ['۰'] = '0', ['۱'] = '1', ['۲'] = '2', ['۳'] = '3', ['۴'] = '4',
            ['۵'] = '5', ['۶'] = '6', ['۷'] = '7', ['۸'] = '8', ['۹'] = '9',
            ['0'] = '0', ['1'] = '1', ['2'] = '2', ['3'] = '3', ['4'] = '4',
            ['5'] = '5', ['6'] = '6', ['7'] = '7', ['8'] = '8', ['9'] = '9'
        };
        
        StringBuilder sb = new StringBuilder(persianStr);
        for (int i = 0; i < sb.Length; i++)
        {
            if (LettersDictionary.TryGetValue(sb[i], out char replaceChar))
            {
                sb[i] = replaceChar;
            }
        }
        return int.Parse(sb.ToString());
    }
}

内容的提问来源于stack exchange,提问作者Ali norouzi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 14:23:13