C#退出using语句块时,出现未将对象引用到对象的实例错误

抱歉只有一张图片,但已经把问题呈现地足够清晰了

img


在一个using的语句块执行完毕后,会报错“未将对象引用到对象的实例”,我之前多次遇到过这个问题,一般是声明的对象没有实例化,即运行的时候对象为null,但这个情况里我找不到没有实例化的对象,调试时也看不到哪个对象是null值,实在是没辙了。

更新:全部代码:
注:这是.Net MAUI跨平台应用,用.net 6.0,Nuget开发包是communityToolkit.MVVM

namespace PasswordSaver.ViewModels
{
    
    public partial class MainPageModel : ObservableObject
    {
        
        public MainPageModel()
        {
            Items = new ObservableCollection<info>();
        }

        [ObservableProperty]
        string website;

        [ObservableProperty]
        string password;

        [ObservableProperty]
        ObservableCollection<info> items;

        string SaveFilePath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "SaverFile.txt");
        
        
        [RelayCommand]
         void LoadMainPage()
        {
            List<string> dataString = new List<string>();
            if (SaveFilePath == null || !File.Exists(SaveFilePath))
            {
                return;
            }
            using (StreamReader reader = new StreamReader(SaveFilePath, true))
            {
                while (!reader.EndOfStream)
                {
                    dataString.Add(reader.ReadLine());
                }
            }
            info[] datainfo = new info[dataString.Count];

            int m = 0;
            for(int i = 0; i < datainfo.Length; i++)
            {
                datainfo[i].websiteText = new string(dataString[m]);
                datainfo[i].passwordText = new string(dataString[m + 1]);
                m+=2;
            }
            for(int i = 0; i < datainfo.Length; i++)
            {
                items.Add(datainfo[i]);
            }
        }


        [RelayCommand]
        void Add()
        {
            info infos = new info();
            if (string.IsNullOrWhiteSpace(Website) || string.IsNullOrWhiteSpace(Password))
            {
                return;
            }
            infos.websiteText = Website;
            infos.passwordText = Password;

            IEnumerable<info> value = items.Where(x => x.websiteText == Website && x.passwordText == Password);
            if (value.Count() > 0)//where方法
            {
                infoIsSame.isSame = true;
                return;
            }

            Items.Add(infos);
            //置空两个输入框Entry
            Website = string.Empty;
            Password = string.Empty;
        }
        [RelayCommand]
        void Delete(info speci)
        {
            if (items.Contains(speci))
            {
                items.Remove(speci);
            }
        }
        
        [RelayCommand]
        async void Save()
        {
            List<info> data = items.ToList();
            string[] infoString = new string[2*data.Count];
            int j = 0;
            for(int i = 0; i < 2*data.Count; i+=2)
            {
                infoString[ i] = data[j].websiteText.ToString();
                infoString[ i+1] = data[j].passwordText.ToString();
                j++;
            }
            
            using(StreamWriter writer = File.CreateText(SaveFilePath))
            {
                for(int k=0; k < infoString.Length; k++)
                {
                    await writer.WriteLineAsync(infoString[ k]);
                }
            }
        }
    }
}

看着不像这里报的错,可以点开详情看看具体错误行,如果错误行的确是这里,你可以重新编译一下程序,看看错误行是否有改变。
因为我觉得你的info这里定义有点问题

要读的path 里文本有数据吗?

await是干啥的
using块里的东西出了using块就释放了
你不要让它作为异步操作的参数呀
这里必须改成同步操作
要么你就等异步操作结束后再释放