0

我非常喜欢 C# 作为一种编程语言。但我真正想在其中看到的一件事是一种以 Python 中完成的方式分隔块的方法 - 使用标识。

我简要了解了 IronPython,但它似乎带来了比我需要的更多的 python 东西。

有人知道使用标识而不是大括号的简单方法吗?

UPD:请比较 C# 中的类定义:

class Foo
{
    public string bar() 
    {
        return "smth";
    }
}

和 Python:

class Foo(object):
    def bar(self):
        return "smth"

查看 C# 变体中使用了多少冗余空间。我的目标是最好地使用两种语言。

4

3 回答 3

2

Boo是一种具有静态类型的 .Net 语言。它使用 CLR,因此您可以与其他 .Net 代码共享,包括 c#;它适用于 winforms 和 system.io 以及其他熟悉的库。它看起来很像 python:在 Boo 中比较这些:

internal class TileBytes:

    public Size as int

    public def constructor(size as int):
         Size = size

    public def Generate(tile as Tile) as (byte):
       buffer as (byte) = array(byte, ((Size * Size) * 3))
       for u in range(0, Size):
         for v in range(0, Size):
            pixelColor as Color32 = GetColor(tile, u, v)
            bufferidx as int = (3 * ((u * Size) + v))
            buffer[bufferidx] = pixelColor.r
            buffer[(bufferidx + 1)] = pixelColor.g
            buffer[(bufferidx + 2)] = pixelColor.b
       return buffer

     public def GetColor(tile as Tile, u as int, v as int) as Color32:
        h as int = (0 if (v > (Size / 2.0)) else 2)
        w as int = (0 if (u > (Size / 2.0)) else 1)
        tc as TileCorner = ((h cast TileCorner) + w)
    return tile[tc].GetPixel(v, (Size - (u + 1)))

在 C# 中对此

class TileBytes
{
public int Size;
public TileBytes(int size)
{
    Size = size;
}

public byte[] Generate(Tile tile)
{
    byte[] buffer = new byte[Size * Size * 3];
    for (int u = 0; u < Size; u++)
    {
        for (int v = 0; v<Size; v++)
        {
            Color32 pixelColor = GetColor (tile, u, v);
            int bufferidx = 3 * (( u * Size) + v);
            buffer[bufferidx] = pixelColor.r;
            buffer[bufferidx + 1] = pixelColor.g;
            buffer[bufferidx + 2] = pixelColor.b;               
        }
    }
    return buffer;
}

public Color32 GetColor(Tile tile, int u, int v)
{
    int h = v > Size / 2.0 ? 0 : 2;
    int w = u > Size / 2.0 ? 0 : 1;
    TileCorner tc = (TileCorner) h + w;
    return tile[tc].GetPixel(v,  Size - (u + 1));
}
}

Boo 也是一个活跃的开源项目

于 2013-08-22T14:59:38.743 回答
0
return someValue == true ? DoSomething() : DoSomethingElse()

代替

if (someValue == true)
{
    DoSomething();
}
else
{
    DoSoemthingElse();
}

xDDD

于 2013-08-22T13:35:46.510 回答
-1

要在代码中“节省”空间,您始终可以采用这种编码风格:

private void DoWork() {
 if(true) {
  DoMoreWork();
 } else {
  DoLessWork();
 }
}

我已经使用它将近一年了,对我的代码的可读性非常满意。

于 2013-08-22T12:36:01.473 回答