gpt4 book ai didi

C# 错误 CS0165 : Use of unassigned local variable - ignoring logic and out reference

转载 作者:行者123 更新时间:2023-11-30 19:46:47 24 4
gpt4 key购买 nike

四处搜索后,我似乎无法找到为什么 C# 编译器提示局部变量 dteDest 在行中未分配

if (dteSrc == dteDest) {

如果我更换行,错误就会消失

DateTime dteSrc, dteDest;

DateTime dteSrc, dteDest = DateTime.MinValue;

据我所知,如果 dteDest 没有被 DateTime.TryParse 初始化,它是一个输出参数,代码将永远不会到达比较行。

我的逻辑是:

  1. 如果 currentDataObj 为 null,则 booHaveOrigDate 为 false,第一个 if 失败
  2. 如果 currentDataObj 不为 null 但不能转换为 DateTime,则 booHaveOrigDate 为 false,第一个 if 失败
  3. DateTime.TryParse 如果不能转换为 DateTime 将返回 false,这连同 && 意味着永远不会使用 dteDest。

简单示例代码

void StrangeLogic(object srcData, object currentDataObj) {
DateTime dteSrc, dteDest;

bool booHaveNewDate = DateTime.TryParse(srcData.ToString(), out dteSrc);
bool booHaveOrigDate = (currentDataObj != null)
&& DateTime.TryParse(currentDataObj.ToString(), out dteDest);

if (booHaveNewDate && booHaveOrigDate) {
if (dteSrc == dteDest) {
// Get a "use of unassignned local variable 'dteDest'
// unless dteDest = DateTime.MinValue beforehand
}
}
}

如果我换行

bool booHaveNewDate = DateTime.TryParse(srcData.ToString(), out dteSrc);

以下内容

bool booHaveNewDate = (srcData != null) && DateTime.TryParse(srcData.ToString(), out dteSrc);

然后编译器提示 srcDate 也没有分配。

谁能指出我所缺少的正确方向 - 我不是说参数检查等我关心的是为什么编译器逻辑似乎被使用常见的 TryParse 函数所愚弄?

附加信息

即使扩展逻辑仍然会出现相同的错误(使用未分配的局部变量)

bool booHaveOrigDate;
if (currentDataObj != null)
booHaveOrigDate = DateTime.TryParse(currentDataObj.ToString(), out dteDest);
else
booHaveOrigDate = false;

if (booHaveOrigDate) {
if (dteSrc == dteDest) {

似乎是编译器对空检查 (currentDataObj != null) 所做的一切阻止了它正确地确定 dteDest 除非分配否则不会被访问

将其更改为此代码并没有问题(除了空对象上可能的 .ToString()

bool booHaveOrigDate = DateTime.TryParse(currentDataObj.ToString(), out dteDest); 
if (booHaveOrigDate) {
if (dteSrc == dteDest) {

最佳答案

您的替换不正确,应该是:

DateTime dteSrc = DateTime.MinValue, dteDest = DateTime.MinValue;

但是你应该使用 TryParse 的返回变量,这是一个 bool 值来查看 tryparse 是否有效,如果你的 booHaveNewDate:

DateTime dteSrc, dteDest;

if(DateTime.TryParse(srcData.ToString(), out dteSrc) && DateTime.TryParse(currentDataObj.ToString(), out dteDest))
{
if (dteSrc == dteDest) {
// Do your stuff here
}
}

现在您不必在开始时指定日期。

** 您应该在使用前测试此代码,它不是生产代码并且可能包含错误

关于C# 错误 CS0165 : Use of unassigned local variable - ignoring logic and out reference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7900635/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com