从Python转换为C#

时间:2013-08-30 12:43:50

标签: c# python

我在将这个小类从Python转换为C#时遇到了一些麻烦,有人可以帮我吗?

到目前为止,我有这个:

public class objDict
{
    public objDict(Dictionary<object, object> obj)
    {
        foreach(KeyValuePair<object, object> kvp in obj)
        {

        }
    }
}

其余的我不知道该怎么做..我只知道一点点关于Python的问题 这是班级:

class objDict(object):

    def __init__(self, obj):
        for k, v in obj.iteritems():
            if isinstance(v, dict):
                setattr(self, _to_str(k).title(), objDict(v))
            else:
                setattr(self, k, v)

    def __getitem__(self, val):
        return self.__dict__[val]

    def __repr__(self):
        return '{%s}' % str(', '.join('%s : %s' % (k, repr(v)) for (k, v) in self.__dict__.iteritems()))

提前致谢!

2 个答案:

答案 0 :(得分:2)

应该是这样的:

class objDict : Dictionary<object, object>
{
    // __init__
    public objDict(IDictionary obj = null)
    {
        if (obj == null)
        {
            return;
        }

        foreach (DictionaryEntry kv in obj)
        {
            if (kv.Value is IDictionary)
            {
                // Not sure if it should be CultureInfo.InvariantCulture or CultureInfo.CurrentCulture
                this.Add(CultureInfo.InvariantCulture.TextInfo.ToTitleCase(kv.Key.ToString()), new objDict((IDictionary)kv.Value));
            }
            else
            {
                this.Add(kv.Key, kv.Value);
            }
        }
    }

    // __getitem__
    public object this[object key]
    {
        get
        {
            return this[key];
        }
    }

    // __repr__
    public string ToString()
    {
        return string.Join(", ", this.Select(p => string.Format("{0} : {0}", p.Key, p.Value)));
    }
}

如果我们排除内部词典将被浅层克隆并且有一个有用的Dictionary<object, object>,我会说我没有看到比“古典.ToString()更好”的东西。

答案 1 :(得分:0)

有一个免费的在线工具可以自动将Python转换为C#。结果并不完美,但消除了移植控制流量等的痛苦。

https://pythoncsharp.com

namespace Namespace {
    
    using System;
    
    public static class Module {
        
        public class objDict
            : object {
            
            public objDict(object obj) {
                foreach (var _tup_1 in obj) {
                    var k = _tup_1.Item1;
                    var v = _tup_1.Item2;
                    if (v is dict) {
                        setattr(this, _to_str(k).title(), objDict(v));
                    } else {
                        setattr(this, k, v);
                    }
                }
            }
            
            public virtual object @__getitem__(object val) {
                return this.@__dict__[val];
            }
            
            public virtual object @__repr__() {
                return String.Format("{%s}", ", ".join(from _tup_1 in this.@__dict__.Chop((k,v) => (k, v))
                    let k = _tup_1.Item1
                    let v = _tup_1.Item2
                    select String.Format("%s : %s", k, repr(v))).ToString());
            }
        }
    }
}