但是在C#中是否有可能在不使用多线程的情况下按照以下条件打印"Hurraa"?
if (a==1 && a==2 && a==3) {
Console.WriteLine("Hurraa");
}
但是在C#中是否有可能在不使用多线程的情况下按照以下条件打印"Hurraa"?
if (a==1 && a==2 && a==3) {
Console.WriteLine("Hurraa");
}
当然可以重载operator ==
来做任何你想做的事情。
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace UnitTestProject1
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
var a = new AlwaysEqual();
Assert.IsTrue(a == 1 && a == 2 && a == 3);
}
class AlwaysEqual
{
public static bool operator ==(AlwaysEqual c, int i) => true;
public static bool operator !=(AlwaysEqual c, int i) => !(c == i);
public override bool Equals(object o) => true;
public override int GetHashCode() => true.GetHashCode();
}
}
}
toString
和valueOf
的行为以及window
的属性,但却没有运算符重载的概念。 - Jacob Krallclass AlwaysEqual
只有五行代码(其中两行是不必要的);在被接受的JavaScript答案中,const a = {
只有三行代码。其他所有内容都是为了证明它能正常工作而进行的测试。 - Jacob Krall当然,这与一些JavaScript答案的概念相同。您在属性获取器中具有副作用。
private static int _a;
public static int a { get { return ++_a; } set { _a = value; } }
static void Main(string[] args)
{
a = 0;
if (a == 1 && a == 2 && a == 3)
{
Console.WriteLine("Hurraa");
}
Console.ReadLine();
}
a = 0
,而且你可以完全省略a
内的set
访问器。只有在你想要一个更短的代码示例时才需要这样做。 - Jeppe Stig Nielsen这取决于a
是什么。我们可以创建一个类,使其实例的行为就像上面显示的那样。我们需要做的就是重载运算符“==”和“!=”。
class StrangeInt
{
public static bool operator ==(StrangeInt obj1, int obj2)
{
return true;
}
public static bool operator !=(StrangeInt obj1, int obj2)
{
return false;
}
}
static void Main(string[] args)
{
StrangeInt a = new StrangeInt();
if(a==1 && a==2 && a==3)
{
Console.WriteLine("Hurraa");
}
}
使用属性的C#
static int a = 1;
static int index
{
get
{
return (a++);
}
}
static void Main(string[] args)
{
if (index == 1 && index == 2 && index == 3)
Console.WriteLine("Hurraa");
}
a
的类型是什么?它是一个局部变量、字段还是属性? - Jacob Krall