【发布时间】:2013-11-20 01:41:20
【问题描述】:
我有以下代码:
foreach (TrainerFileHandler trainer in mTrainers)
{
if (cboTrainer.SelectedItem == (trainer.First + " " + trainer.Last))
{
trainerID = trainer.ID;
break;
}
}
TrainerFileHandler 是我的构造函数,它具有 First、Last 和 ID 的属性。现在,我已经浏览了代码并看到我在组合框中选择的项目与第一个 + " " + last 完全一样,但它仍然说它们彼此不相等。
我还有一些非常相似的东西:
foreach (ExerciseFileHandler exercise in mExercise)
{
if (cboExercise.SelectedItem == exercise.PlanName)
{
planID = exercise.ID;
break;
}
}
现在它工作得非常好。我试着这样做:
foreach (TrainerFileHandler trainer in mTrainers)
{
string first = trainer.First;
string last = trainer.Last;
string full = first + " " + last;
if (cboTrainer.SelectedItem == last)
{
trainerID = trainer.ID;
break;
}
}
但这也没有用。任何人都知道为什么这不起作用?可能需要注意的是,在两个 if 语句下,即使一个有效而一个无效,它也会显示“可能的意外引用比较;要进行值比较,请将左侧转换为类型 'string'”。我尝试将左侧转换为字符串,但没有帮助。
【问题讨论】:
-
为了更好的衡量,你应该使用
String.Equals()而不是==。 -
另外,我不确定你是否完全理解构造函数的概念。这是您用“新”调用的特殊功能。
TrainerFileHandler喜欢你用的是一个类。 -
@MPelletier:为什么?
==在幕后已经翻译成.Equals()。 -
如果它是不同的类型,那么这意味着有问题并且代码不应该一起工作。使用
Equals所做的只是在它们应该是编译时错误时引入逻辑错误。除非您使用dynamic,否则您应该知道程序中每个点的每个变量的类型。 -
@JeroenVannevel:向下转型不是编译时检查。