Can(a == 1&& a == 2&& a == 3)在没有多线程的情况下在C#中评估为true?


Can (a==1 && a==2 && a==3) evaluate to true in C# without multi-threading?

我知道可以用JavaScript来实现

但是,是否有任何可能的解决方案可以在不使用多线程的情况下,在下面的C中给出的条件下打印"hurraa"?

1
2
3
if (a==1 && a==2 && a==3) {
    Console.WriteLine("Hurraa");
}


当然,你可以让EDOCX1[0]超负荷工作,做任何你想做的事情。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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();
        }
    }
}


当然,这和几个javascript答案的概念是一样的。在属性getter中有一个副作用。

1
2
3
4
5
6
7
8
9
10
11
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();
}


C有财产

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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。我们可以创建一个类,这样它的实例的行为就如上面所示。我们要做的是重载操作符"=="和"!=。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    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");
        }
    }