Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从Python到C的转换_C#_Python - Fatal编程技术网

C# 从Python到C的转换

C# 从Python到C的转换,c#,python,C#,Python,我在将这个小类从Python转换为C时遇到了一些麻烦,有人能帮我吗 到目前为止,我有: public class objDict { public objDict(Dictionary<object, object> obj) { foreach(KeyValuePair<object, object> kvp in obj) { } } } 提前谢谢 应该是这样的: class objDict

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

到目前为止,我有:

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

        }
    }
}

提前谢谢

应该是这样的:

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)));
    }
}

我要说的是,如果我们排除内部字典将被浅层克隆,并且有一个有用的.ToString,那么我看不到比经典字典更好的东西。

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


到目前为止你有什么?还有,为什么不直接使用?为什么需要这样做?你想解决什么问题?这个类打算做什么?我想把它从Python转换成C。我已经做了大部分工作,我只是停留在我发布的类上。看看Python代码,似乎你真正想做的是将JSON反序列化成一个对象图。检查此处的任何答案是否有帮助:
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)));
    }
}
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());
            }
        }
    }
}