是否有可能在C#中编写没有变量的程序?

Van*_*n0k -2 c# variables

所以我和我的朋友收到了实现此功能的编程任务:

功能图像

所以你必须输入x和输出y.原样,这很容易,但事情就是这样:我们可以在没有变量的情况下,只使用一个Console.ReadLine()实例(并将其解析为double),然后将结果传递给多个"if"检查吗?使用新的类和方法也是作弊:我们必须在main()中做所有事情.

以下是带有一个变量的程序示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication4 {
    class Program {
        static void Main(string[] args) {
            double x;
            x = double.Parse(Console.ReadLine());
            if (x < -2.0) { Console.Write(2.0); }
            if ((x < -1.0)&&(x>=-2.0)) { Console.Write(1.0); }
            if ((x < 0.0)&&(x>=-1)) { Console.Write(0.0); }
            if ((x>=0.0)&&(x<1.0)) { Console.Write(x); }
            if (x >= 1.0) { Console.Write(1.0); }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Ser*_*rvy 10

首先,首先,您当前的程序正在定义变量args.你不需要这样做,因为你不能声明变量.将声明更改Main为:

static void Main()
{
     //...
} 
Run Code Online (Sandbox Code Playgroud)

您可以使用某种形式的外部状态来存储通常存储在变量中的任何值,例如,始终将值读取/写入文件:

File.WriteAllText("line.txt", Console.ReadLine());

if (double.Parse(File.ReadAllText("line.txt")) < -2.0)
    Console.Write(2.0);
if ((double.Parse(File.ReadAllText("line.txt")) < -1.0)
    && (double.Parse(File.ReadAllText("line.txt")) >= -2.0))
    Console.Write(1.0);
if ((double.Parse(File.ReadAllText("line.txt")) < 0.0)
    && (double.Parse(File.ReadAllText("line.txt")) >= -1))
    Console.Write(0.0);
if ((double.Parse(File.ReadAllText("line.txt")) >= 0.0)
    && (double.Parse(File.ReadAllText("line.txt")) < 1.0))
    Console.Write(double.Parse(File.ReadAllText("line.txt")));
if (double.Parse(File.ReadAllText("line.txt")) >= 1.0)
    Console.Write(1.0);
File.Delete("line.txt");
Run Code Online (Sandbox Code Playgroud)

您可以使用注册表值,获取/发布值到Web服务等来执行相同的操作.当然,这些都是非常低效的,但它是一个玩具示例.

当然,除了效率超低之外,这看起来也很混乱.通过使用方法,我们实际上可以使这个看起来更好看.我们的方法不能有任何参数,因为参数是变量,但是返回解析行的无参数方法在这里确实具有可读性的奇迹:

public static void Main()
{
    File.WriteAllText("line.txt", Console.ReadLine());

    if (GetValue() < -2.0)
        Console.Write(2.0);
    if (GetValue() < -1.0 && GetValue() >= -2.0)
        Console.Write(1.0);
    if (GetValue() < 0.0 && GetValue() >= -1)
        Console.Write(0.0);
    if (GetValue() >= 0.0 && GetValue() < 1.0)
        Console.Write(GetValue());
    if (GetValue() >= 1.0)
        Console.Write(1.0);
    File.Delete("line.txt");
}
public static double GetValue()
{
    return double.Parse(File.ReadAllText("line.txt"));
}
Run Code Online (Sandbox Code Playgroud)