我在Silverlight应用程序中有一个比较2个字符串的条件,由于某种原因,当我使用==它时返回false而.Equals()返回true.
这是代码:
if (((ListBoxItem)lstBaseMenu.SelectedItem).Content.Equals("Energy Attack"))
{
// Execute code
}
if (((ListBoxItem)lstBaseMenu.SelectedItem).Content == "Energy Attack")
{
// Execute code
}
Run Code Online (Sandbox Code Playgroud)
任何理由为什么会这样?
他们真的一样吗?今天,我遇到了这个问题.这是立即窗口的转储:
?s
"Category"
?tvi.Header
"Category"
?s == tvi.Header
false
?s.Equals(tvi.Header)
true
?s == tvi.Header.ToString()
true
Run Code Online (Sandbox Code Playgroud)
所以,无论是s和tvi.Header包含"类别",而是==返回false,并Equals()返回true.
s被定义为字符串,tvi.Header实际上是一个WPF TreeViewItem.Header.那么,他们为什么会回归不同的结果呢?我一直认为它们可以在C#中互换.
任何人都可以解释为什么会这样吗?
两种形式的平等,第一种失败,第二次失败.
(object)"abc" == (object)"abc"
false
((object)"abc").Equals((object)"abc")
true
Run Code Online (Sandbox Code Playgroud)
在下面的参考文献中,我们看到"C#中的等式运算符不是多态的"
ref:字符串等式运算符==在c#中
顺便说一句:仍然不确定为什么这是一个问题.我认为它可能是这样的,但不是因为这个测试成功了.
static void Main(string[] args) {
var o = new classOfT<string>() { val = "abc" };
Console.WriteLine((object)o.val == "abc");
}
public class classOfT<T> {
public string val { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句:我不同意这个问题的完全重复规则,但是嘿.
答案说明:
... String类包含静态bool Equals(字符串a,字符串b)方法和静态bool Equals(对象a,对象b)方法.不同之处在于前者是在String类本身中定义的,而后者是从Object类继承的(它是String的基类)
在语义上这是有道理的,但它在OO和C#语言的更广泛的上下文中是否有意义?
为什么我要烦恼这个问题?好吧,刚刚发现了一个错误,我想在我的大脑中以韵律或理由而不是在"只记得这个"的情况下将其归档,它会在类别之前咬你.
更新:
目前正在考虑使用原语(从功能角度来看)Vs多态性.因为我一直在做越来越多的功能性的东西,这可能是为什么母语让我感到困惑.我还没有想到这一点(不,我不是务实.我被语言设计所吸引).感谢您的回复!
我正在审查一些代码,我发现了一些看起来像这样的东西:
public class MyClass
{
public bool IsEditable { get; set; }
public void HandleInput()
{
if (IsEditable.Equals(false))
{
//do stuff
}
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,它(IsEditable.Equals(false))是相同的(IsEditable == false)(也是相同的(!IsEditable)).
除了个人喜好,有没有在所有的有什么区别.Equals()和==,用于比较特别是当bool小号?
我有覆盖GetHashCode,Equals并且两种方法为不同的对象提供相同的结果,但为什么仍然得到假?
class Program
{
static void Main(string[] args)
{
Console.WriteLine(new Person("james") == new Person("james"));
Console.ReadKey();
}
}
class Person
{
private string Name;
public Person(string name)
{
Name = name;
}
public override int GetHashCode()
{
return 1;
}
public override bool Equals(object obj)
{
return true;
}
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
C#:String.Equals vs. ==
大家好.
有段时间有人告诉我,你永远不应该将字符串与==进行比较,并且你应该使用string.equals(),但它指的是java.
¿.NET c#中的差异beteen ==和string.equals是什么?
我想在我的项目中登录密码验证.当用户点击登录按钮时,编译器转到此方法
public ActionResult VerifyPassword(User user)
{
var givenPassword =user.Password;
var givenUserName=user.UserName;
//now i need compare password
var myUser=db.User.Find(somevalue)//find user from database,
But how can i do this????Because somevalue needs to be a Primary Key
}
Run Code Online (Sandbox Code Playgroud)
如果我做错了什么.请指出我正确的方向我在网上搜索了很多.但没有找到使用实体框架完成此任务的教程.
我有转换类型的问题.我正在尝试这样的代码(最小的,详细的代码):
string cityType = "City1";
int listingsToSearch = 42;
if (cityType = "City1") // <-- error on this line
{
listingsToSearch = 1;
}
Run Code Online (Sandbox Code Playgroud)
但"如果"声明转换城市,但我一直得到:
不能隐式地将类型'string'转换为'bool'
我想要实现的目标:我有一个搜索引擎,其中包含搜索文本的文本框和搜索位置的两个单选按钮(IE City1或City2)
当我收到搜索文本和单选按钮时,它们是一个字符串的形式
string thesearchtext, thecitytype;
thesearchtext = HttpContext.Current.Request.QueryString["s"].ToString();
thecitytype = HttpContext.Current.Request.QueryString["bt"].ToString();
Run Code Online (Sandbox Code Playgroud)
当我收到城市单选按钮时,它们将采用"city1"或"city2"的格式.
我需要做的是将城市radiobuttons转换为int,以便我可以在我的搜索数据集中使用它们.我需要转换"city"为整数1和"city2"整数2.
我知道这可能是一个简单的类型转换,但我无法理解.到目前为止,代码if给出了上面的错误:
int listingsToSearch;
if (thecitytype = "City1")
{
listingsToSearch = Convert.ToInt32(1);
}
else
{
listingsToSearch = Convert.ToInt32(2);
}
Run Code Online (Sandbox Code Playgroud) 这个问题与这个 C# 问题非常相似,但我想知道它们是否都彼此相同,无论该值是什么,而不是它们都等于特定的已知值。
我的列表包含许多对象,例如:
public MyClass {
public int Id { get; set; }
public string MyProperty { get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我最初的方法是:
List<MyClass> MyList = new List<MyClass>();
//... Add some values
string firstResult = MyList.First().MyProperty;
return MyList.All(x => x.MyProperty.Equals(firstResult))
Run Code Online (Sandbox Code Playgroud)
但我觉得有更优雅的方法来做到这一点吗?
我知道在c#中你可以将字符串与==和equals进行比较,但我想知道根据最佳实践我需要使用什么.请注意,我需要知道String和string是否相同
c# ×10
.net ×4
equals ×2
asp.net-mvc ×1
casting ×1
gethashcode ×1
if-statement ×1
linq ×1
string ×1
types ×1