小编EZL*_*ner的帖子

在C#中检查对象是否是非特定泛型类型

说我有以下课程:

public class General<T> { }
Run Code Online (Sandbox Code Playgroud)

我想知道一个对象是否属于那种类型.我知道我可以使用反射来找出该对象是否属于该泛型类型Type.GetGenericTypeDefinition,但我想避免这种情况.

是否有可能做某事obj is General<T>,或obj.GetType().IsAssignableFrom(typeof(General<T>))

我很惊讶我找不到类似的问题,尽管我在搜索中可能使用了错误的关键字.

.net c# generics types

11
推荐指数
1
解决办法
4573
查看次数

使用JSON.Net自定义JSON到XML的转换

我正在使用(Newtonsoft)的JSON.Net库和C#,我想自定义其默认XML转换的一部分.

例如,如果我想更改数组的XML转换,而不是说我有以下JSON字符串:

{
    "object":
    {
        "a": 
        {
            [
                "d",
                "e",
                "f"
            ]
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我使用JSON.Net的默认转换器将其转换为XML,我得到:

<object>
    <a>d</a>
    <a>e</a>
    <a>f</a>
</object>
Run Code Online (Sandbox Code Playgroud)

但是,我希望它转换为:

<object>
    <a special:type="array">
        <element>d</element>
        <element>e</element>
        <element>f</element>
    </a>
</object>
Run Code Online (Sandbox Code Playgroud)

我可以以某种方式采用现有的转换方法并稍微改变一下吗?

XML和JSON都是基于树的结构,这应该使它们的解析器模块化.所以我正在寻找一个可以用来覆盖其转换功能的类:

protected override XmlNode ToXmlNode(JsonNode jNode)
{
    if (jNode.Type == JsonType.Array)
    {
        XmlNode xNode = this.XDocument.CreateElement(jNode.Name)
        foreach (JsonNode jSub in jNode.Children)
        {
            var newJSub = jSub.Clone();
            newJSub.Name = "element";
            xNode.AppendChild(this.ToXmlNode(newJSub));
        }
        return xNode;
    }
    else
        return base.ToXmlNode(jNode);
}
Run Code Online (Sandbox Code Playgroud)

(我正在使用.Net v2.0)

有谁知道任何有用的东西?

c# xml json converter json.net

5
推荐指数
1
解决办法
1183
查看次数

Python:同时用于多个参数的 TypeVar

有没有办法让TypeVar(或其他格式)捕获函数的所有参数?例如,假设我想包装一个通用函数,使其所有参数都在一个元组中给出:

def invoke(f: Callable[..., T], args: Tuple[...]) -> T:
    return f(*args)
Run Code Online (Sandbox Code Playgroud)

只是...我将使用静态类型检查来强制 be 的内容Tuple与函数的参数具有相同的类型,而不是省略号 ( )。

谢谢。

python type-hinting python-3.x

5
推荐指数
1
解决办法
694
查看次数

简单 Python C 扩展中的内存泄漏

我有一些类似于下面的代码。该代码泄漏,我不知道为什么。泄漏的是在 C 代码中简单创建 Python 类实例。我用来检查泄漏的函数是create_n_times下面定义的,它只是创建新的 Python 实例并在循环中取消引用它们。

这本身并不是 MWE,而是示例的一部分。为了更容易理解,代码的作用是:

  1. Python 代码定义数据类并使用set_ip_settings_type.
  2. create_n_times然后,调用C 扩展函数,该函数创建和销毁nPython 数据类的实例。

有人可以帮忙吗?

在Python中:

import c_api

@dataclass
class IpSettings:
    ip: str
    port: int
    dhcp: bool

c_api.set_ip_settings_type(IpSettings)
c_api.generate_n_times(100000)
Run Code Online (Sandbox Code Playgroud)

在 C++ 中,我将以下代码编译为名为的 Python 扩展c_api(它是该库定义的一部分):

#include <Python.h>

// ... Other functions including a "PyInit" function

extern "C" {
    
PyObject* ip_settings_type = NULL;
PyObject* set_ip_settings_type(PyObject* tp)
{
    Py_XDECREF(ip_settings_type);
    Py_INCREF(tp);
    ip_settings_type = tp;
    return Py_None;
}

PyObject* create_n_times(PyObject* n)
{
   long n_ = PyLong_AsLong(n); …
Run Code Online (Sandbox Code Playgroud)

c python python-c-api

3
推荐指数
1
解决办法
188
查看次数

输入输入时,检查INSERT模式是否为ON

我试图计算各种事件的输入字段的值,而不管捕获的事件如何.

我正在考虑事件keypress keyup keydown cut paste事件(我忘了什么吗?).

我正在尝试确定文本输入INSERT模式是打开(默认 - 打开)还是关闭.我无法通过捕获该键的键事件来确定模式,但我不知道初始状态是什么.

有谁知道吗?优选地 - 包括IE8 +,Chrome和FF的跨浏览器解决方案.

任何解决方案,或者用Barney Stinson的话说,"骗局,骗局,喧嚣,蒙骗,开局,脆弱的火焰,战术和竹子"都可以帮助我.

提前致谢.

javascript keyboard javascript-events

2
推荐指数
1
解决办法
2262
查看次数

如何将JSON属性转换为XML作为xml元素的属性

使用Newtonsoft的.Net库将JSON转换为XML,有没有办法将特定的JSON元素转换为XML属性?

例如,采用以下JSON:

{
    "array": {
        "item": [
            1,
            2,
            3
        ],
        "length": 3
    }
}
Run Code Online (Sandbox Code Playgroud)

并将其转换为:

<array length="3">
    <item>1</item>
    <item>2</item>
    <item>3</item>
</array>
Run Code Online (Sandbox Code Playgroud)

谢谢.

c# xml json json.net

1
推荐指数
1
解决办法
1641
查看次数

Python 的 dict 无法识别自己的密钥

编辑2:最后我能够生成一个MWE:

from typing import Generic, TypeVar
T = TypeVar('T')

class Cache:
    __dict = {}

    @classmethod
    def add(cls, item):
        cls.__dict[item] = (item, [item, item, item, {item: item}])
        print('On setting:', item in cls.__dict)

    def __init_subclass__(cls, **kwargs):
        Cache.add(cls)


class Class(Cache, Generic[T]):
    pass

d = Cache._Cache__dict
tp = list(d)[0]
print('On checking:', tp in d)
Run Code Online (Sandbox Code Playgroud)

在 python 3.6 中,输出是:

On setting: True
On checking: False
Run Code Online (Sandbox Code Playgroud)

而在 3.8 中则是:

On setting: True
On checking: True
Run Code Online (Sandbox Code Playgroud)

如果这还不够好奇,如果我删除 的继承Generic[T],一切都很好。

原来的

我正在使用 Python 3.6,KeyError当尝试从字典中获取密钥时,我得到了: …

python dictionary python-3.6

1
推荐指数
1
解决办法
368
查看次数