【问题标题】:Combo Box Item Won't Equal Constructor c#组合框项目不等于构造函数c#
【发布时间】: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:向下转型不是编译时检查。

标签: c# winforms combobox


【解决方案1】:

@MPelletier 提供了正确答案作为评论

我需要使用 String.Equals() 而不是 ==。

【讨论】:

  • 呃,我要投票还是...?这是我第一次在评论中得到答案...
  • @MPelletier 哈哈。您可以将其作为答案,我将删除我的并选择您的作为答案
  • 不,不能。问题已关闭。没关系,没关系。
  • @MPelletier 啊。我懂了。是什么让你觉得我不懂构造函数?我的意思是,我使用它们,我不会说我完全理解它们,但不确定你如何从我的帖子中看出这一点。
  • 我严重怀疑这是答案,而不是掩盖实际问题的东西。 ComboBox.SelectedItem 返回一个 object 类型的变量。我假设这掩盖了手头的问题,因为可以将两个字符串与==Equals 进行比较。尝试将您的 SelectedItem 转换为字符串,然后进行比较。
猜你喜欢
  • 1970-01-01
  • 2012-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-15
  • 2016-02-08
  • 1970-01-01
相关资源
最近更新 更多