我在将这个小类从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()))
提前致谢!
答案 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#。结果并不完美,但消除了移植控制流量等的痛苦。
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());
}
}
}
}